Помощь - Поиск - Пользователи - Календарь
Полная версия: Слово в тексте
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
}0pa
Помогите исправить фрагмент программы, считающей сколько раз встречается в строке слово "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
1. Вместо <> length поставь <> length + 1 (посмотри, к примеру, как оно работает на строке, состоящей только из одного слова word)

2. После if copy(stroka,j,4)='word' then допиши else Inc(j)
klem4
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
Ну, и зачем два раза подряд вызывать 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
Если уж на то пошло, то такое по-хорошему надо конечным автоматом делать.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.