Под словами будем понимать последовательности символов разделенных пробелами (кроме, соответственно, первого и последнего слов).
Пусть s='мама мыла раму'. Признаком конца слова можно считать пробел, кроме последнего слова. Чтобы не обрабатывать последнее слово специальным образом, добавим в конец строки оператором S:=s+' ' символ «пробел».
Просмотрим все элементы строки и если символ не пробел, то добавляем его к строке t. Если пробел, то в t уже целое слово. Выдаем его на экран, и начинаем формировать в t новое слово. Перед формированием «очищаем» слово t (t:=''- пустая строка).
Var s, r, t: string;
i: integer;
Begin
Readln(s);
s:=s+' '; t:=''; {t пустая строка}
For i:=1 to length(s) do
If s[i]<>' ' then t:=t+s[i]
else Begin
Writeln(t);
t:='';
End;
readln
End.
Используем эту идею для решения более сложной задачи: найти в строке самое длинное слово – палиндром. Для этого формируем как прямое слово t:=t+s[i], так и обратное r:=s[i]+r. Кроме того, последовательно проверяем длины слов и ищем самое длинное.
Var s, r, t, wmax: string;
i, lmax, l: integer;
Begin
Readln(s); s:=s+' ';
r:='';{"обратное" слово-пустая строка}
t:='';{"прямое" слово-пустая строка }
wmax:='';{искомое слово – пустая строка}
For i:=1 to length(s) do
If s[i]<>' ' then {символ не равен пробелу}
Begin
r:=s[i] + r; t:=t + s[i]
End
else Begin
If r = t then
If length(r)>length (wmax)
then wmax:=r;
r:=''; t:=''; {готовимся формировать новые слова}
End;
Write(wmax);
Readln
End.
Теперь представим, что «очень много» символов последовательно записано в текстовом файле (на олимпиадах обычно бывает именно так). Тогда последним символом окажется код #26 (признак конца файла). Но, если при создании файла в конце строки будет нажата клавиша «Enter», то в конце файла могут появиться и символы #13 (CR) или (и) #10 (LF). Не забудьте об этом при участии в соревнованиях, именно из этого символа команда СГАУ на четвертьфинале чемпионата мира сдала программу только с третьей попытки, заработав 40 минут штрафного времени. Обязательно закрывайте выходной файл, иначе результат в нем может не появиться.
Используем стандартные файлы ввода и вывода. Тогда их можно не описывать и не указывать их имена в операторах ввода и вывода
Будем считывать символы из файла последовательно и по алгоритму, изложенному выше, решим задачу.
Var r, t, wmax: string;
ch: char;
Begin
Assign (input, 'input.txt'); Reset(input);
Assign (output, 'output.txt'); Rewrite(output);
r:=''; t:=''; wmax:='';
Repeat
Read (ch);
If (ch<>' ')and(ch<>#26)and(ch<>#10)and(ch<>#13) then