kmp模式匹配算法的pascal实现

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 idler 的 blog

{
  implementation of kmp algorithm
}
program impl_kmp;

uses
    crt;

const
     max_strlen = 255;

var
   next         : array [ 1 .. max_strlen ] of integer;
   str_s, str_t : string;
   int_i        : integer;

procedure get_nexst( t : string );
var
   j, k : integer;
begin
     j := 1; k := 0;
     while j < length(t) do
     begin
          if ( k = 0 ) or ( t[j] = t[k] ) then
          begin
               j := j + 1; k := k + 1;
               next[j] := k;
          end
          else k := next[k];
     end;
end;

function index( s : string; t : string ) : integer;
var
   i, j : integer;
begin
     get_next(t);
     index := 0;
     i := 1; j := 1;
     while ( i <= length(s) ) and ( j <= length(t) ) do
     begin
          if ( j = 0 ) or ( s[i] = t[j] ) then
          begin
               i := i + 1; j := j + 1;
          end
          else j := next[j];
          if j > length(t) then index := i - length(t);
     end;
end;

begin
     clrscr;
     write('s = ');
     readln(str_s);
     write('t = ');
     readln(str_t);
     int_i := index( str_s, str_t );
     if int_i <> 0 then
     begin
          writeln( 'found ', str_t, ' in ', str_s, ' at ', int_i, '.' );
     end
     else
         writeln( 'cannot find ', str_t, ' in ', str_s, '.' );
end.

index函数用于模式匹配,t是模式串,s是原串。返回模式串的位置,找不到则返回0

本文关键:pascal kmp 模式匹配
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top