Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Слово в тексте

Автор: }0pa 17.10.2006 16:29

Помогите исправить фрагмент программы, считающей сколько раз встречается в строке слово "word".

Код

while j<>length(stroka) do  {может здесь исправить length(stroka)+4}
begin
  if copy(stroka,j,4)='word' then  
   begin
     k:=k+1;
     j:=j+4  {конечно,можно было бы и без этого, но тогда придется обрабатывать ненужные символы}
    end        

Автор: Michael_Rybak 17.10.2006 18:19

1. Вместо <> length поставь <> length + 1 (посмотри, к примеру, как оно работает на строке, состоящей только из одного слова word)

2. После if copy(stroka,j,4)='word' then допиши else Inc(j)

Автор: klem4 17.10.2006 18:28

function GetCount(const s: String): Integer;
var
temp: String;
count: Integer;
begin
temp := s;
count := 0;
while (pos('word', temp) <> 0) do begin
delete(temp, pos('word', temp), 4);
inc(count);
end;
GetCount := count;
end;


Ну или перебор :

function GetCount(const s: String): Integer;
var
i, count: Integer;
begin
i := 1;
count := 0;
while (i <= length(s)) do begin
if Copy(s, i, 4) = 'word' then begin
inc(count);
inc(i, 4);
end
else inc(i);
end;
GetCount := count;
end;


Почему в теоретический раздел ? Переношу в задачи.

Автор: volvo 17.10.2006 18:35

Ну, и зачем два раза подряд вызывать Pos ?

function GetCount(s: String): Integer;
var
p, count: Integer;
begin
count := 0;
repeat

p := pos('word', s);
if p <> 0 then begin
delete(s, p, 4);
inc(count);
end;

until p = 0;
GetCount := count;
end;

Автор: Michael_Rybak 17.10.2006 18:53

Если уж на то пошло, то такое по-хорошему надо конечным автоматом делать.