bm.~pas

来自「bm算法的delphi实现」· ~PAS 代码 · 共 55 行

~PAS
55
字号
unit BM;
//字符串匹配BM算法
interface

procedure BM_Input();
procedure BM_Dist();
procedure BM_Action();

implementation

uses SysUtils,StrUtils;
//正文,模式及距离变量
Var p,t:String;dist:Array[0..127] of integer;
procedure BM_Input();
Begin//输入正文及模式
Writeln('请输入字符串正文:');
readln(t);
Writeln('请输入字符串模式:');
readln(p);
End;
procedure BM_Dist();
//距离子程序
Var j,c,m:integer;
Begin
   m:=Length(p);//正文长度
   for c:=0 to 127 do//词典为128个字符
      dist[c]:=m;
   for j:=m-1 downto 1 do
      if dist[Integer(p[j])]=m then dist[Integer(p[j])]:=m-j;
End;
procedure BM_Action();
//字符串BM算法子程序
Var i,m,j,k,n:integer;c:char;
Begin
   m:=Length(p);
   n:=Length(t);
   i:=m;
   repeat
   j:=m;k:=i;
   while (j>0) and (p[j]=t[k]) do
      begin
         j:=j-1;k:=k-1;
      end;//while
   if j=0 then
      begin
         writeln('字符串开始位置在:',i-m+1);
         writeln('按任意键继续...');readln(c);i:=i+1;
      end//if
   else i:=i+dist[Integer(t[i])];
   until i>n;
   writeln('匹配完成,按任意键结束...');readln(c);
End;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?