Перейти к содержанию

Обработка строк в PascalABC.Net

Материал из Викиучебника — открытых книг для открытого мира

Выделение слов из строки

[править]

Пользователь вводит набор слов (предложений). Необходимо сформировать из встречающихся в предложении слов их массив. При этом повторяющиеся слова не должны входить в массив дважды.

var
  S, W: string;
  L: List<string>;
  D: set of char;
  i: integer;

begin
  Include(D, ' ');
  Include(D, '.');
  Include(D, '!');
  Include(D, '?');
  Include(D, ',');
  Include(D, ';');
  
  Readln(S);
  L := new List<string>();
  
  i := 1;
  
  while i <= S.Length do
  begin
    W := '';
    while (i <= S.Length) and (S.Chars[i] in D) do Inc(i);
    while (i <= S.Length) and (not (S.Chars[i] in D)) do
    begin
      W := W + S.Chars[i];
      Inc(i);
    end;
    
    if W <> '' then
    begin
      var j := 0;
      while (j < L.Count) and (L[j] <> W) do Inc(j);
      
      if j = L.Count then L.Add(W);
    end;
  end;
  
  for i := 0 to L.Count - 1 do
    if i < L.Count - 1 then WriteFormat('{0}, ', L[i]) else WriteLnFormat('{0}.', L[i]);
end.

Сортировка данных строки

[править]

Дана строка, состоящая из слов и чисел, отделенных друг от друга пробелами. Сформировать три строки, одна из которых содержит только целые числа, встречающиеся в исходной строке, вторая - только вещественные числа, а третья – оставшиеся слова.

const
  Separator = '; ';

var
  S, W: string;
  D: set of char;
  Integers, Reals, Strings: string;
  i: integer;

begin
  Include(D, ' ');
  Include(D, '!');
  Include(D, '?');
  Include(D, ',');
  Include(D, ';');
  
  Readln(S);
  
  i := 1;
  while i < S.Length do
  begin
    W := '';
    var numI := 0;
    var numF := 0.0;
    while (i <= S.Length) and (S.Chars[i] in D) do Inc(i);
    while (i <= S.Length) and (not (S.Chars[i] in D)) do
    begin
      W := W + S.Chars[i];
      Inc(i);
    end;
    
    var toInt := TryStrToInt(W, numI);
    var toReal := TryStrToFloat(W, numF);
    
    if toInt then Integers += W + Separator;
    if toReal then Reals += W + Separator;
    if (not toInt) and (not toReal) then Strings += W + Separator;
  end;
  
  WritelnFormat('Целые числа: {0}', Integers);
  WritelnFormat('Вещественные числа: {0}', Reals);
  WritelnFormat('Слова: {0}', Strings);
end.

Максимально длинный палиндром

[править]

Найти в строке Str максимально длинный палиндром.

var
  Str: string;
  Found: boolean;

function IsEqual(s: string): boolean;
begin
  Result := true;
  var j := s.Length div 2;
  var i := 1;
  while Result and (i <= j) do
  begin
    if s[i] <> s[s.Length - i + 1] then Result := false;
    Inc(i);
  end;
end;

begin
  Readln(Str);
  var Length2 := Str.Length;
  
  Found := false;
  while not Found and (Length2 > 0) do
  begin
    var str2 := '';
    for var i := 1 to Str.Length - Length2 + 1 do
    begin
      for var j := i to i + Length2 - 1 do
        str2 += Str[j];
      
      if IsEqual(str2) then
      begin
        Found := true;
        WritelnFormat('Найден максимально длинный палиндром {0}.', str2);
      end;
      
      str2 := '';
    end;
    Dec(Length2);
  end;
  
  if not Found then Writeln('Не найден максимально длинный палиндром.');
  
  Readln();
end.