Обработка строк в 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.