Предмет: Информатика, автор: 11max

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


11max: да, я считаю так
Аноним: Паскаль АБС или ABC.Net ?
11max: ABC.Net
Аноним: Такой есть у меня, попробую помочь
Аноним: взял здоровый английский текст для отладки - ни одного слова, которое на of заканчивается, кроме просто отдельных of
Аноним: В общем, подбирайте текст для отладки...
11max: хорошо
11max: вот самый просто и банальный: 123 123of ncaslof123 careful only for
Аноним: Надо хотя бы 2 разных слова с -of
11max: 123 123of ncaslof123 careful only for asdfdsof asdasd asd 12312 dasof

Ответы

Автор ответа: Аноним
1
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.


11max: у меня паскаль ругается на строчку ss:=s.split(' ')
11max: Спасибо)
Аноним: Надеюсь, уже не ругается! Если, конечно, он PascalABC.Net
11max: сильно помогли, последнее что хочу попросить так это объяснить, что делает строчка: ss:=s.split('')
Аноним: Как Вы могли заметить из объявления, ss - это динамический массив строк. Строки в PascalABC.Net являютcя объектами и для них определен некоторый набор методов. В частности, метод Split с параметром "пробел" выполняет разбиение строки на слова, разделенные пробелом и результатом такого разбиения является динамический массив строк (тот самый ss), нумерующийся с нуля. А далее мы в цикле проходим образовавшийся массив и ищем в нем слова, у которых два правых символа равны "of".
Аноним: Найденные слова мы помещаем в отдельный массив, элементы которого выводим по завершению чтения входного файла.
Похожие вопросы
Предмет: Русский язык, автор: Аиша2010
Предмет: Английский язык, автор: Alinali1756