3 / 3 / 0
Регистрация: 19.12.2009
Сообщений: 21
1

Нужно в строке удалить слова, состоящие из букв заданного слова

23.12.2009, 16:47. Показов 3020. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание такое: вводится слово и строка (отдельно). Нужно в строке удалить слова, состоящие из букв заданного слова, а остальные слова продублировать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2009, 16:47
Ответы с готовыми решениями:

Удалить все слова, состоящие только из букв последнего слова
Помогите пожалуйста решить задачку: Дана строка символов. Разделителями слов в строке являются:...

В символьной строке удалить все слова, состоящие из N - букв - C++
Помогите пожалуйста не могу написать программу через string.

В символьной строке удалить все слова, состоящие более чем из N - букв
Напихал все что можно, не работает. Программирования не знаю похоже):wall: #include <iostream>...

В символьной строке удалить все слова, состоящие из нечетного количества букв
Ребят помогите, не могу понять. Нужно, чтобы мусор не удаляло, а оставляло. Мусором...

10
3 / 3 / 0
Регистрация: 19.12.2009
Сообщений: 21
27.12.2009, 17:49  [ТС] 2
Вот что я написала, но работает не правильно. В чем ошибка?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const
   delims = [' ','.',',','!','?'];
var
   word: set of char;
   a,s: string;
   k,l,j,i,bow: integer;
begin
   writeln ('Введите слово ');
   readln (a);
   writeln ('Введите строку ');
   readln (s);
   for j:=1 to length(a) do
      word:=word+[a[j]];
   i:=1;
   while i<=length(s) do
      if s[i] in delims then
         inc(i)
      else
      begin
         bow:=i;
         while (i<=length(s)) and not(s[i] in delims) do
            inc(i);
         k:=0;
         for l:=bow to i-bow do
            if not(s[l] in word) then
               k:=1;
         if k=0 then
         begin
            delete(s,bow,i-bow);
            i:=bow;
         end
         else
         begin
            insert(' '+copy(s,bow,i-bow),s,i);
            i:=i+1+i-bow;
         end;
      end;
   writeln(s);
   readln;
end.
0
3 / 3 / 0
Регистрация: 19.12.2009
Сообщений: 21
28.12.2009, 23:22  [ТС] 3
Мне завтра сдавать, а программа не работает
Помогите пожалуйста, сама никак не разберусь, уже сидит в голове эта схема, как родная в мозгах поселилась, ни проверить ее не могу, ни новую придумать!! :`(
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
28.12.2009, 23:46 4
Кристинкка, приводите примеры. Потому как не совсем понятно следующие вопросы:
- чем разделены (какие именно разделители)?
- как именно дублировать?
- в каком виде Вам нужно выводить результат?
- разделители сохраняются?
0
3 / 3 / 0
Регистрация: 19.12.2009
Сообщений: 21
28.12.2009, 23:57  [ТС] 5
Разделители описаны в разделе констант, предполагается, что слова отделены друг от друга только одним разделителем.
Дублировать - значит чтобы при выводе это слово повторялось 2 раза.
В программе все изменения проходят в данной строке. Она же, измененная, и выводится. Разделители заменяются пробелами.

Чтобы понятнее было: ввод: слово - "кот" , строка - "ток отток потолок плинтус", вывод: "потолок потолок плинтус плинтус"
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.12.2009, 00:17 6
Кристинкка, у Вас пример противоречит Вашему условию. Если следовать Вашему условию, то слово "потолок" надо тоже удалить так как оно содержит буквы слова "кот". Вы уж разберитесь что именно Вам нужно. Чтобы я потом не переделывал по сто раз.
0
3 / 3 / 0
Регистрация: 19.12.2009
Сообщений: 21
29.12.2009, 00:23  [ТС] 7
Как я поняла это задание, нужно удалить слова, скорее составленные из букв заданного. Ну или если по-другому сформулировать, то продублировать слова, содержащие хотя бы одну букву не из заданного слова
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.12.2009, 00:32 8
Кристинкка, мда... Вы решили вынести мне мозг на ночь. Подумайте еще раз над Вашим примером, над Вашим условием и над тем, что Вы сейчас написали.
0
3 / 3 / 0
Регистрация: 19.12.2009
Сообщений: 21
29.12.2009, 00:39  [ТС] 9
Inadequate, извиняюсь... Сама уже туго соображаю.
Окончательный вариант такой: все слова, содержащие хотя бы одну букву не из заданного слова, продублировать, а остальные удалить.
А если я вам скажу, в каком моменте программы у меня ошибка, вам это как-то поможет?..

Цитата Сообщение от Кристинкка Посмотреть сообщение
k:=0;
for l:=bow to i-bow do
if not(s[l] in word) then
k:=1;
if k=0 then
Вот если вместо этого условия поставить любое другое, то программа все отлично и верно удаляет и дублирует
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.12.2009, 04:19 10
Условие Вашей задачи и особенно Ваши объяснений конечно оставляют желать лучшего...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
uses
  crt;
const
  Dividers=[' ',',','.',';',':','-','=','+'];{äîïèñàòü íóæíûå}
var
  s,w,temp:string;
  i,j:integer;
  fl:boolean;
begin
  clrscr;
  ReadLn(w,s);//÷èòàåì ñíà÷àëà ñëîâà, ïîòîì ñòðîêó
  {èùåì ñëîâà è ïðîèçâîäèì íàä íèìè íóæíûå äåéñòâèÿ}
  i:=0;
  temp:='';//íåçàáûâàåì îïóñòîøèòü âðåìåííóþ ïåðåìåííóþ ïåðåä íà÷àëîì ïîèñêà ñëîâ
  repeat
    inc(i);//óâåëè÷èâàåì íà 1
    if not (s[i] in Dividers) then//åñëè î÷åðåäíîé ñèìâîë íå ïðèíàäëåæèò ìíîæåñòâó ðàçäåëèòåëåé
      temp:=temp+s[i];//òîãäà äîáàâëÿåì ýòîò ñèìâîë ê âðåìåííîé ïåðåìåííîé
    if ((s[i] in Dividers) or (i=Length(s))) and (temp<>'') then//åñëè æå î÷åðåäíîé ñèìâîë ïðèíàäëåæèò ìíîæåñòâó ðàçäåëèòåëåé ÈËÈ ýòî ïîñëåäíèé ñèìâîë â ñòðîêå
    begin//è ïðè ýòîì íàøà âðåìåííàÿ ïåðåìåííàÿ íå ïóñòà
      fl:=true;//ïðåäïîëîæèì ÷òî íàéäåííîé ñëîâî ñîñòîèò òîëüêî èç áóêâ çàäàííîãî
      j:=1;
      repeat
        inc(j);
        if pos(temp[j],w)=0 then//åñëè î÷åðåäíîé ñèìâîë âðåìåííîé ïåðåìåííîé ÍÅ ñóùåñòâóåò â çàäàííîì ñëîâå
          fl:=false//òîãäà ìåíÿåì ôëàæîê
      until
        not fl or (j=Length(temp));
      if fl then//åñëè ñëîâî ñîñòîèò èç áóêâ çàäàííîãî
      begin
        Delete(s,pos(temp,s),Length(temp));
        Dec(i,Length(temp))
      end
      else//èíà÷å
      begin
        Insert(' '+temp+' ',s,i+1);
        Inc(i,Length(temp)+1);
      end;
      temp:='';//íå çàáûâàåì îïóñòîøàòü âðåìåííóþ ïåðåìåííóþ, ò.ê. íàì ìîæåò áûòü åùå íàäî èñêàòü
    end;
  until
    i=Length(s);
  {ïðîáåãàåìñÿ ïî ñòðîêå è óäàëÿåì ïîâòîðû ðàçäåëèòåëåé åñëè îíè åñòü}
  for i:=1 to Length(s)-1 do
    if (s[i] in Dividers) and (s[i+1] in Dividers) then
      Delete(s,i,1);
  writeln(TrimLeft(s))
end.
Я всё подробно прокомментил, если потребуется какой-то другой вывод исправите самостоятельно, я думаю это будет совсем не трудно.
На счет Вашей программы это вообще какая-то глупость.
1
3 / 3 / 0
Регистрация: 19.12.2009
Сообщений: 21
29.12.2009, 06:11  [ТС] 11
Большое спасибо за помощь!! И за терепние тоже! А программу какую задали, такую и приходится делать
0
29.12.2009, 06:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2009, 06:11
Помогаю со студенческими работами здесь

В символьной строке удалить все слова, состоящие более чем из N букв
Не использовать дефолтные функции работы со строками (например strstr, strlen) -В символьной...

В символьной строке удалить все слова, состоящие из нечетного количества букв.
Привет. Нужна ваша помощь в написании проги на С. Не на С++ =) Ниже приведено условие: В...

В символьной строке удалить все слова, состоящие более чем из N букв
Привет. Нужна помощь. Условие-В символьной строке удалить все слова, состоящие более чем из N...

Вывести слова, состоящие из заданного количества букв
нужно составить программу, которая считывает текст из файла и выводит на экран только слова,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru