Написать программу на ABC Pascal:
Дан текстовый файл f. Найти слова, заканчивающие на of
11max:
да, я считаю так
Паскаль АБС или ABC.Net ?
ABC.Net
Такой есть у меня, попробую помочь
взял здоровый английский текст для отладки - ни одного слова, которое на of заканчивается, кроме просто отдельных of
В общем, подбирайте текст для отладки...
хорошо
вот самый просто и банальный: 123 123of ncaslof123 careful only for
Надо хотя бы 2 разных слова с -of
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.
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.
у меня паскаль ругается на строчку ss:=s.split(' ')
Спасибо)
Надеюсь, уже не ругается! Если, конечно, он PascalABC.Net
сильно помогли, последнее что хочу попросить так это объяснить, что делает строчка: ss:=s.split('')
Как Вы могли заметить из объявления, ss - это динамический массив строк. Строки в PascalABC.Net являютcя объектами и для них определен некоторый набор методов. В частности, метод Split с параметром "пробел" выполняет разбиение строки на слова, разделенные пробелом и результатом такого разбиения является динамический массив строк (тот самый ss), нумерующийся с нуля. А далее мы в цикле проходим образовавшийся массив и ищем в нем слова, у которых два правых символа равны "of".
Найденные слова мы помещаем в отдельный массив, элементы которого выводим по завершению чтения входного файла.
Вас заинтересует
2 года назад
2 года назад
2 года назад
2 года назад
7 лет назад
7 лет назад
9 лет назад