Регистрация
17 Июл 2013
Сообщения
65
Репутация
-3
Спасибо
1
Монет
0
Найдите ошибку. Программа должна считать количество слов в тексте, при этом пробелы и другие знаки препинания могут идти неразрывно подряд.

var S,b,h: string;
k,z,v,x,i: integer;
a: array [1..7] of string;
begin
readln(S);
a[1]:=' ';
a[2]:=':';
a[3]:=';';
a[4]:='.';
a[5]:=',';
a[6]:='?';
a[7]:='!';
k:=1;
while x<>0 do
begin
for i:= 1 to 7 do
while z<>0 do
begin
z:=pos(a,S);
if z<>0 then
begin
delete(S,z,1);
h:=copy(S,z,1);
while h=a do
delete(S,z,1);
k:=k+1;
end;
end;
x:=length(S);
end;
writeln(k);
end.
 
ну во первых delete immutable(т. е. не умеет мутировать - применять изменения к переменной которую ему сказали почистить) и возвращает результ так же как copy, во вторух вы пытаетесь сначала удалить все маркера окончания слов??! или мне кажется? вот вам логика программы: создаем массив разделителей слов (знаки препинания, пробел). создаем ещё одну переменную типа bool и значением false прочесываем строку for-ом как массив char-ов и делаем это: -ищем текущий символ в массиве разделителей (IndexOf(Arr, String) ) -если поиск вернул не -1 --смотрим в булеву переменную, если true - continue; --увеличиваем счетчик слов и ставим булеву переменную в true -если -1 то ставим булеву переменную в false как-то так
 
Назад
Сверху