Версия для печати

Вывести те слова текста, которые отличны от последнего слова.

Оцените материал
(0 голосов)

Вывести те слова текста, которые отличны от последнего слова.

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.
Прочитано 9815 раз