📄 bm.pas
字号:
unit BM;
//字符串匹配BM算法
interface
procedure BM_Input();
procedure BM_Dist();
procedure BM_Action();
implementation
uses 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -