Написать программу ** ABC Pascal: Дан текстовый файл f. Найти слова, заканчивающие ** of

0 голосов
52 просмотров

Написать программу на ABC Pascal:
Дан текстовый файл f. Найти слова, заканчивающие на of


Информатика (214 баллов) | 52 просмотров
0

да, я считаю так

0

Паскаль АБС или ABC.Net ?

0

ABC.Net

0

Такой есть у меня, попробую помочь

0

взял здоровый английский текст для отладки - ни одного слова, которое на of заканчивается, кроме просто отдельных of

0

В общем, подбирайте текст для отладки...

0

хорошо

0

вот самый просто и банальный: 123 123of ncaslof123 careful only for

0

Надо хотя бы 2 разных слова с -of

0

123 123of ncaslof123 careful only for asdfdsof asdasd asd 12312 dasof

Дан 1 ответ
0 голосов
Правильный ответ

Const
  n=50;
var
  f:Text;
  s:string;
  ss:array of string;
  a:array[1..n] of string;
  i,j:integer;
begin
  Assign(f,'input.txt'); Reset(f);
  j:=0;
  while not Eof(f) do begin
    Readln(f,s);
    ss:=s.Split(' ');
    for i:=0 to Length(ss)-1 do
      if Length(ss[i])>1 then
        if RightStr(ss[i],2)='of' then
        begin Inc(j); a[j]:=ss[i] end;
  end;
  Close(f);
  for i:=1 to j do Write(a[i],' ');
  Writeln
end.

Тестовое решение:
123of asdfdsof dasof

Есть решение и покороче, но совсем не уровня начинающих:
uses
  System.Text.RegularExpressions;
const
  n=50;
var
  f:Text;
  s:string;
  a:array[1..n] of string;
  i,j:integer;
begin
  Assign(f,'input.txt'); Reset(f);
  j:=0;
  while not Eof(f) do begin
    Readln(f,s);
    foreach var m:Match in Regex.Matches(s,'\b\S+of\b') do
    begin Inc(j); a[j]:=m.Value end;
  end;
  Close(f);
  for i:=1 to j do Write(a[i],' ');
  Writeln
end.

(142k баллов)
0

у меня паскаль ругается на строчку ss:=s.split(' ')

0

Спасибо)

0

Надеюсь, уже не ругается! Если, конечно, он PascalABC.Net

0

сильно помогли, последнее что хочу попросить так это объяснить, что делает строчка: ss:=s.split('')

0

Как Вы могли заметить из объявления, ss - это динамический массив строк. Строки в PascalABC.Net являютcя объектами и для них определен некоторый набор методов. В частности, метод Split с параметром "пробел" выполняет разбиение строки на слова, разделенные пробелом и результатом такого разбиения является динамический массив строк (тот самый ss), нумерующийся с нуля. А далее мы в цикле проходим образовавшийся массив и ищем в нем слова, у которых два правых символа равны "of".

0

Найденные слова мы помещаем в отдельный массив, элементы которого выводим по завершению чтения входного файла.