1. 程式人生 > >BM模式匹配演算法I C++實現

BM模式匹配演算法I C++實現

//
int BM(char *s,char *t,int *dist,const int lenS,const int lenT)
{
int i,j,k;
i = lenT-1;
while(i<lenS)
{
j = lenT-1;
k = i;
while(j>=0&&s[k]==t[j])
{
j--;
k--;
}
if(j<0)
return i+2-lenT;
else
i = i + dist[s[k]];
}
if(i>=lenS)
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
int cases;
char s[MAX],t[MAX];
int dist[MAX];
cout<<"請輸入案例的個數:";
cin>>cases;
while(cases--)
{
cout<<"請輸入主串:"<<endl;
cin>>s;
int lenS = strlen(s);
while(1)
{
cout<<"請輸入需要匹配的模式串(以0結束):"<<endl;
cin>>t;
if(!strcmp(t,"0"))
break;
int lenT = strlen(t);
get_dist(dist,t,lenT);
int pos = BM(s,t,dist,lenS,lenT);
if(pos==0)
cout<<"沒有匹配項!"<<endl;
else
cout<<"匹配的開始位置為:"<<pos<<endl;
}
}
system("pause");
return 0;
}