Поиск подстроки в строке
Пусть дана строка 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 |