Другие языки программирования и технологии

Подсчитать слова в тексте.Турбо Паскаль

подсчитать количество слов write в тексте в паскале program gfhg; uses crt; var s:string; k,i,a:integer; begin writeln('строка:'); readln(s); s:=' '+s; for i:=1 to length(s) do if s=' ' then k:=k+1; writeln(k); end. Вот прога, нужно только подщитать слово write сколько раз его ввели. в проге щитает все слова а нужно только слово write
Danchik Kulyasov
Danchik Kulyasov
275
program gfhg;
uses crt;
var s:string;
k,j,a:integer;
begin
writeln('строка: ');
readln(s);
k:=0;
a:=length(s);
for j:=1 to a do
if s[j]=',' or s[j]=':' or s[j]='"' then s[j]:=' ';
if s[a]='.' or s[a]='!' or s[a]='?' then s[a]:=' ';
s:=' '+s+' ';
a:=length(s);
for j := 1 to a - 6 do
if copy(s, j, 7) = ' write ' then inc(k);
writeln(k);
end.
Юра Иванов
Юра Иванов
2 886
Лучший ответ
Как-то так:
S1 := S; { в копию строки }
K := 0;
while Pos('write', S1) > 0 do { пока write встречается в строке }
begin
P := Pos('write', S1); { позиция слова write }
Delete(S1, P, 5); { удалим слово write }
if Length(S1) < P then Inc(K) { если write было в конце строки => +1 }
else if S1[P] = #32 then Inx(K); { если после write идёт пробел => +1 (а если не пробел, то слово ещё не закончено) }
{ можно ещё на знаки препинания проверить }
end;
WriteLn('В строке "', S, '" слово write встречается ', K, ' раз');
Но это так - типа для отмазки!
По идее нужно выделять слово с учётом знаков препинания и сравнивать его целиком!
А то к примеру rewrite может попасть в счётчик, а не должно!
Роман Шаулис
Роман Шаулис
73 103
> в проге щитает все слова

Ерунду она у тебя "щитает", а не слова)
В строке, к примеру, "слово слово слово "
она "нащитает" аж 7 слов вместо трех)
John Konor
John Konor
32 502
for i := 1 to length(s) - 4 do
if copy(s, i, 5) = 'write' then
inc(k);
Введите еще одну переменную для запоминания начала каждого слова, затем при нахождении пробела используя функцию copyпроизводите сравнение
Семетей ********
Семетей ********
1 904