Определить количество вхождений строки в строку

Рейтинг: 0Ответов: 1Опубликовано: 20.11.2014

Даны две строки: S1 и S2. Определить количество вхождений строки S2 в строку S1.

procedure TForm1.Button3Click(Sender: TObject);

var

   s, s1, SResalt: shortString;

   n, i, caunter :integer;

begin

 s:= edit5.text;      //строка

 s1:= edit6.text;     // входящая строка

 SResalt:= s + ' ' + s1;  //вхождение строки

 n:= length(SResalt);  //  подсчёт символов

 caunter:= 0;

      while POS(s1 ,s) <> 0 do

 ShowMessage (SResalt);
 ShowMessage (IntToStr (caunter));

end;

end.

Не могу сделать подсчёт вхождений строки, то есть после while POS(s1 ,s) <> 0 do. Не представляю, как это сделать.

Ответы

▲ 2

Строка while POS(s1 ,s) <> 0 do, если будет вхождение, будет приводить к вечному циклу. :) Можно использовать функцию delete для удаления найденой подстроки. :) И счетчик в цикле нужно накручивать. ;)

procedure TForm1.Button3Click(Sender: TObject);
var
s, s1, SResalt: shortString;
n, i, caunter :integer;
begin
  s:= edit5.text;      //строка
  s1:= edit6.text;     // входящая строка
  SResalt:=s;
  n:= length(s1);  //  подсчёт символов

  caunter:= 0;
  while POS(s1, SResalt) > 0 do
  begin
    caunter:=caunter+1;
    Delete(SResalt,POS(s1, SResalt),n);
  end;
  ShowMessage (IntToStr (caunter));
end;

end.