Консультация № 175686
28.12.2009, 01:16
0.00 руб.
0 1 1
Уважаемые эксперты!Прошу Вас помочь мне решить задачу(если можно,то с объснением).Заранее благодарна!
Дан файл(содержание на ваш выбор),содержащий текст на русском языке.Выяснить,входит ли данное слово в указанный текст,и если да,то сколько раз

Обсуждение

давно
Профессионал
304622
583
28.12.2009, 19:24
общий
это ответ
Здравствуйте, Масленникова Валерия.

Программа в приложении. Сделано допущение, что в тексте нет знаков препинания, т.е. все слова разделены пробелами (или переносами строк). Исходя из этого слово ищется целиком, т.е. отсеисваются случаи, когда искомое слово является частью другого слова (нос -- подносик).

Приложение:
Исходный файл:
ЙЦУКЕ орывиорысв ылворсп ЙЦУКЕ ылмор
оыврсп ыоур ЙЦУКЕ оырвЙЦУКЕпаоцвр ылво
оырвп оырвмс оывмрп ыволмп ыло
ы влром ЙЦУКЕ ЙЦУКЕ рпваыоЙЦУКЕ

Программа:
var f:text;
s,w:string;
i,j,ls,lw:integer;

begin
readln(w);
{Читается слово}
assign(f,'data.txt');
reset(f);
i:=0;
{Открыть файл данных и читать до конца}
while not eof(f) do
begin
readln(f,s);
{ Прочитывается строка s }
j:=pos(w,s);
{Ищется слова в строке}
while j>0 do
{ Если найденная позиция ненулева (слово найдено) }
begin
ls:=length(s);
lw:=length(w);
if ((j=1) or ((j>1) and (s[j-1]=' ')))
{Проверка на то, чтобы перед словом был пробел или
оно стояло в начале строки, ...}
and
((j+lw-1=ls) or ((j+lw-1<ls) and (s[j+lw]=' ')))
{... и чтобы после него был пробел или
слово стояло в конце строки}
then inc(i);
delete(s,j,length(w));
j:=pos(w,s);
{Удаляется найденное и ищется следующее}
end;
end;
close(f);
writeln(i);
readln;
end.
Форма ответа