Помощь - Поиск - Пользователи - Календарь
Полная версия: задача со строками
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Subaru
есть строка :'I I I LIVE IN THIS THIS WORLD'
надо чтоб она удалила не-нужные слова (чтоб вышло 'I LIVE IN THIS WORLD')
я не понемаю как проверить есть ли там два одинакового слова один за одним... sad.gif
помогите... rolleyes.gif
APAL
Раздели строку на слова, а потом как в массиве - сравнивай соседние элементы.
FreeMan
Подсказка: чтоб разделять на слова надо искать пробелы smile.gif
Subaru
huh.gif нифига не понел blink.gif
APAL
Что именно не понял?

Кстати, вопрос о разделении строки на слова уже встречался на нашем форуме. Но я предлагаю вместе решить это заново.


P.S.: Для "не авторов" топика - не спешите выкладывать сразу готовое решение. Давайте человека попытаемся "научить", а не пользоваться "халявой"... ИМХО.
Subaru
я не понял как Разделить строку на слова..
это типа первое слово внести и потом enter нажать чтоб второе написать и т.д ? или как ?
Guest
Нет. Строка (по условию) у тебя уже задана. Тебе ее надо програмно обработать, т.е. разобрать по словам.
Например завести массив, наподобие m : array[1..20] of String[10]
Занести в него слова, а потом и сравнивать элементы массива.



P.S.: Массив на слова - это конечно не оптимально - но зато более наглядно и понятно.
APAL
Какой-то глюк. Предыдущее сообщение - мое.
P@sh@
а не проще ли безо всяких массивов просто запоминать последнее встреченное слово и сравнивать его с текущим при сканировании строки?
APAL
Я же говорил:
Цитата
P.S.: Массив на слова - это конечно не оптимально - но зато более наглядно и понятно.
Subaru
спасибо что всем помогаите но только мне нет.. sad.gif sad.gif
ладно..
буду знать что тут только мне не помогают и больше не приду спрашивать..
большое спасибо !
sad.gif sad.gif sad.gif
Digitalator
Тебе сказали все что требуется, для того чтобы написать программу к задаче.
От тебя требуются только начальные знания языка! Если что-то не понятно, задавай конкретные вопросы, а не типа "а как сделать?".
Subaru
Подойдет ли такое решение этой задачи:

Код

Program I_Live;
Const
 s: String = 'I I I live in this this world world';

Var
 iNext, iPrev: Byte;
 sNext, sPrev: String;
 one_more: Boolean;
Begin
 s := s + ' ';
 one_more := True;

 iPrev := Pos(' ', s);
 sPrev := Copy(s, 1, Pred(iPrev));
 While one_more Do
   Begin
     Repeat
       iNext := Pos(' ', Copy(s, Succ(iPrev), Length(s) - iPrev)) + iPrev;
       one_more := (iNext <> iPrev);
       If not one_more Then Break;

       sNext := Copy(s, Succ(iPrev), Pred(iNext - iPrev));
       If sPrev = sNext Then
         delete(s, iPrev, iNext - iPrev)
     Until sNext <> sPrev;
     sPrev := sNext; iPrev := iNext
   End;

 s[0] := Chr(Pred(Length(s)));
 WriteLn( 's = ', s );
End.


или ее нужно делать как-нибудь по-другому ?
Digitalator
эта прога неправильно работает, когда одинаковы два последних слова, например "I live in this world world"

Исправь ошибку и будет ок.
Subaru
Исправил... А теперь ?
Altair
Цитата
эта прога неправильно работает, когда одинаковы два последних слова, например "I live in this world world"

эээ... тот код, что представлен выше работает... Или Subaru его отредактировал?

Замечание:
Можно программу еще модернизировать.
В условии не сказанно, что слова разделяются одним пробелом.
Если в строке между словами встретится 2 и более пробелов, то не все лишние слова удалятся.
Это желательно исправить...
что бы не исправлять основной алгоритм, можно перед удалением лишних слов, удалить лишние пробелы...
И еще желательно слелать программу более универсальной - вместо константы строки, лучше вводить ее во время работы программы. Тогда ее можнобудет скомпилировать в загрузочный модуль (EXE) и использовать как полнофункциональную программу.
(кстати такая программа может пригодится при удалении лишних строк из файла.)
Замечание 2
Паскали разные бывают .... smile.gif
такая строка:
Код
s[0] := Chr(Pred(Length(s)));

Будет ошибкой при компилировании в FPC (free pascal)

ЗЫ:
мое первое сообщение тоже было про строки smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.