|
|||
Program Strings_main;. razd:set of char;. integer;. string;. writeln(‘Введите строку для обработки ’);. Readln (st); . while (i<=length(st)) and (not (st[i] in razd)) do. dl_sl:= dl_sl+1;. then begin. kol_sl:= kol_sl+1;. if wrd = inv_wrdProgram 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.
|
|||
|