Разделитель — один из символов « ,.;:!?\»\’» (начиная с пробела и заканчивая апострофом). Буква — любой символ, отличный от разделителя. Слово — непустая последовательность букв, ограниченная с каждой стороны разделителем или концом строки. Например, в строке «x9i23!слово, ,» два слова — «x9i23» и «слово». Исходная строка вводится с клавиатуры, изменённая строка выводится на экран. Если в задании используется «заданное» слово, оно также вводится с клавиатуры. Разделители в программе представляются как множество.
program fr;
label 1;
var
i, n: integer;
s, sub: string;
mn: set of char;
function make_palindrom: boolean;
var
map: array ['!' .. 'z'] of integer;
x: char;
i, m, count: integer;
result: boolean;
begin
m := length(sub);
count := 0;
for x := '!' to 'z' do
map[x] := 0;
for i := 1 to m do
if (sub[i] >= '!') and (sub[i] <= 'z') then
inc(map[sub[i]]);
for x := '!' to 'z' do
if map[x] mod 2 = 1 then
inc(count);
if count >= 2 then
result := false
else
result := true;
make_palindrom := result;
end;
begin
mn := [' ', ',', '.', ';', ':', '!', '?', '"'];
write('Vvedite slova: ');
readln(s);
n := 0;
1:
for i := 1 to length(s) do
if (s[i] in mn) then
begin
if i = 1 then
begin
delete(s, 1, 1);
goto 1;
end
else
begin
inc(n);
sub := copy(s, 1, i - 1);
if not make_palindrom then
writeln(n, ' slovo: ', sub)
else
writeln(' ', n, ' slovo: PALINDROM( ', sub, ' )');
end;
delete(s, 1, i);
goto 1;
end;
sub := s;
if not make_palindrom then
writeln(n + 1, ' slovo: ', sub)
else
writeln(' ', n + 1, ' slovo: PALINDROM( ', sub, ' )');
readln;
end.