Определить количество слов 'For' и 'In' в строках текстового файла - Pascal
Формулировка задачи:
Определить количество слов 'For'и'In' в строках тексового файла.
Помогите, что здесь не так? Результат выдает нули
program test8;
var
f1:text;
str:string;
kf,ki:integer;
procedure mypoisk2(str2:string; var ki2:integer);
var
i:integer;
begin
ki2:=0;
for i:=1 to length(str2)-1 do
begin
if (str2[i]='I') and (str2[i+1]='N') then
ki2:=ki2+1;
end;
end;
procedure mypoisk3(str2:string; var kf2:integer);
var
i:integer;
begin
kf2:=0;
for i:=1 to length(str2)-2 do
begin
if (str2[i]='F') and (str2[i+1]='O') and(str2[i+2]='R') then
kf2:=kf2+1;
end;
end;
begin
assign(f1,'D:\myprogram.txt');
reset(F1);
while not eof(f1) do
begin
readln(f1,str);
mypoisk2(str,ki);
mypoisk3(str,kf);
writeln('Kolychestvo in ',ki);
writeln('Kolychestvo for ',kf);
end;
close(f1);
end.Решение задачи: «Определить количество слов 'For' и 'In' в строках текстового файла»
textual
Листинг программы
program test8;
function UppCase(S:string):string;
var i:integer;
Res:string;
begin
res:='';
for i:=1 to Length(S) do
res:=res+UpCase(s[i]);
Result:=res;
end;
function find(str:string;substr:string):integer;
var count:integer;
begin
count:=0;
while str<>'' do
begin
if(pos(UppCase(substr),UppCase(str))>0 ) then
begin
inc(count);
delete(str,1,pos(UppCase( substr),UppCase(str))+Length(substr));
end
else break;
end;
find:=count;
end;
var
f1:text;
str:string;
kf,ki:integer;
begin
kf:=0;ki:=0;
assign(f1,'C:\myprogram.txt');
reset(F1);
while not eof(f1) do
begin
readln(f1,str);
ki:=ki+find(str,'in');
kf:=kf+find(str,'for');
end;
close(f1);
writeln('Kolychestvo in ',ki);
writeln('Kolychestvo for ',kf);
readln;
end.
Объяснение кода листинга программы
- Программа начинается с объявления функции
UppCaseс аргументомSтипаstringи возвращаемым значением типаstring. - В функции
UppCaseобъявляется переменнаяiцелочисленного типа и переменнаяResстрокового типа. - В цикле от 1 до длины строки
Sсимволы переводятся в верхний регистр и добавляются к итоговой строкеres. - Возвращается значение переменной
res. - Затем идет объявление функции
findс двумя аргументами-строкамиstrиsubstrи возвращаемым значением типаinteger. - В функции
findобъявляется переменнаяcountтипаinteger. - Затем идет цикл, в котором осуществляется подсчет количества подстрок
substrв строкеstr, учитывая регистр символов. - В основной части программы объявляются переменные
f1иstrтипаtextиstringсоответственно, а также переменныеkfиkiтипаinteger. - Выполняется открытие файла
myprogram.txtи происходит чтение строк из файла. - Для каждой строки осуществляется подсчет количества подстрок
inиforс помощью функцииfind, и эти значения суммируются с предыдущими значениямиkiиkfсоответственно. - Файл закрывается, и на экран выводится количество подстрок
inиfor.