BM串匹配

来源:互联网 发布:js数字滚动抽奖 编辑:程序博客网 时间:2024/06/04 17:41
#include<iostream>
using namespace std;
int dist(char ch,char T[])
{
int i=T[0]-1;
while(i>0)
{
if(T[T[0]]==ch)return (int)T[0];
if(ch==T[i])return (int)(T[0]-i);
i--;
}
return (int)T[0];
}
int BM(char S[],char T[])
{
      int i=T[0];
      int j;
      while(i<=S[0])
 {
           j=T[0];
  while(j>0&&S[i]==T[j])
  {
  j--;
  i--;
            }
  if(j==0) return i+1;
           else
  {
i=i+dist(S[i],T);  
            }
      }
      return 0;
}
int main()
{
char *S=new char[];
char *T=new char[];
int i=1;
char ch;
cout<<"输入主串,以*结束"<<endl;
while(cin>>ch,ch!='*')
{
S[i]=ch;
i++;
}
S[0]=i-1;
i=1;
cout<<"输入子串,以*结束"<<endl;
while(cin>>ch,ch!='*')
{
T[i]=ch;
i++;
}
T[0]=i-1;
int position=BM(S,T);
if(position==0)cout<<"匹配失败"<<endl;
else cout<<"匹配成功位置"<<position<<endl;
return 0;
}