информатика ЗКМЗКЕ_1курс / Работа_со_строкой_осень_2011
.docProgram Strings_main;
var
razd:set of char;
i, {номер обрабатываемого символа строки}
kol_sl, { количество слов в строке,
оно же – порядковый номер }
dl_sl {длина очередного слова}
: integer;
st, {исходная строка }
wrd, {текущее слово}
inv_wrd {инвертированное слово }
: string;
begin
razd:=[' ',',','.',':','!'];
writeln(‘Введите строку для обработки ’);
Readln (st);
kol_sl:=0; {до обработки строки количество слов = 0 }
kol_pal := 0; {до обработки количество палиндромов = 0 }
i:=1; { обработка начинается с первого символа строки}
while ( i<=length(st)) do {обеспечение перебора всех
символов строки }
begin
dl_sl:=0; {длина текущего слова}
wrd := ‘’; { нач. значение – пустая строка}
inv_wrd := ‘’; { нач. значение – пустая строка}
beg_wrd:=i;{запоминание номера символа
начала очередного слова}
{ цикл перебора символов текущего слова }
while (i<=length(st)) and (not (st[i] in razd)) do
begin
dl_sl:= dl_sl+1;
wrd := wrd + st[ i ]; {формирование текущего
слова из букв}
inv_wrd := st [ i ] + inv_wrd; {формирование
инвертированного
слова из букв,
буква «приклеивается»
слева к формируемому слову}
i:=i+1; {переход к очередному символу строки }
end; {конец цикла перебора символов очередного слова }
if dl_sl > 0 {было слово}
then begin
kol_sl:= kol_sl+1;
{действия с очередным словом }
{о каждом слове известно:
порядковый номер в строке kol_sl,
длина слова dl_sl,
номер байта начала слова в строке beg_wrd ,
палиндром или нет wrd = inv_wrd ? }
if wrd = inv_wrd
then begin { найден палиндром }
kol_pal := kol_pal + 1; {кол-во палинд.}
{действия с очередным палиндромом }
end;
end;
i:=i+1; {переход к очередному символу строки}
end; {конец цикла перебора символов строки}
{вывод результатов работы со строкой}
readln;
end.