Вывести те слова текста, которые отличны от последнего слова.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows;
const //Разделители слов.
D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
S, Sw, Sw1 : String;
i, j, Pos2, Len, LenW : Integer;
F : Boolean;
begin
SetConsoleCp(1251);
SetConsoleOutputCP(1251);
repeat
Writeln('Задайте строку:'); Readln(S);
Writeln('Список слов, отличных от последнего слова.');
Writeln('Дополнительно, в словах удалены все предыдущие вхождения последней буквы:');
Len := Length(S); Pos2 := 0;
F := True;
for i := Len downto 1 do begin
//Пропускаем разделители. if S[i] in D then Continue;
//Отслеживаем конец слова. if (i = Len) or (S[i + 1] in D) then Pos2 := i;
//Отслеживаем начало слова. if (i = 1) or (S[i - 1] in D) then begin
//Выделяем очередное слово из строки.
LenW := Pos2 - i + 1; Sw := Copy(S, i, LenW);
if F then begin
//Это последнее слово в строке.
F := False; Sw1 := Sw;
end else if Sw <> Sw1 then begin
//Это не последнее слово, отличное от последнего в строке.
//Удаялем все предыдущие вхождения последней буквы.
for j := LenW - 1 downto 1 do if Sw[j] = Sw[LenW] then Delete(Sw, j, 1)
;
Writeln(Sw);
end;
end;
end;
Writeln('Повторить - Enter, выход - любой символ + Enter.');
Readln(S); until S <> '';
end. |