Поиск подстроки в строке

 

     Пусть дана строка s и подстрока p. Тогда для поиска подстроки p в строке s возможно использование следующего алгоритма:

{prpoisk.pas

Сайт Algorithm (http://www.algorithm1.narod.ru/)

Автор проекта: Galina}

var s,p:string;

   i,j,lp,ls:integer;

begin

{Ввод строки и подстроки}

  writeln('Введите строку');

  readln(s);

  ls:=length(s);

  writeln('Введите подстроку');

  readln(p);

  lp:=length(p);

  {Поиск подстроки в строке}

  i:=0;

  repeat

    i:=i+1;

    j:=1;

    while (j < lp) and (s[i+j] = p[j]) do

      j:=j+1;

    until (j = lp) or (i = lp-ls) or (i > ls);

    if (j = lp) and (lp <> 1) then writeln('Подстрока в строке есть')

    else if i <> ls then writeln('Подстроки в строке нет');

end.

     Алгоритм является эффективным, если несовпадение символов строки и подстроки происходит после нескольких сравнений во внутреннем цикле. Но, если совпадение обнаружено в конце строки, то требуется lp*ls сравнений.

Автор проекта: Galina
Hosted by uCoz