完整代码
#include <stdio.h>
int table[26];
//初始化 移动表
char init(char p[],int m)
{
for(int i=0;i<26;i++)
{
table[i]=0;
}
for(char i='A';i<='Z';i=i+1)
{
for(int j=0;j<m;j++)
{
if(p[j]==i)
{
table[i-65]=m-j-1;
}
}
}
for(int i=0;i<26;i++)
{
if(table[i]==0)
{
table[i]=m;
}
}
}
char horspool(char t[],char p[],int n,int m)
{
int i=m-1;
while(i<=n-1)
{
int k=0;
while(k<m&&p[m-1-k] == t[i-k])
{
k++;
}
if(k==m)
{
return i-m+1;
}
else
{
int a=t[i]-65;
i= i+ table[a];
}
}
return -1;
}
int main()
{
char p[20];
char t[100];
int n,m;
while(scanf("%d%d",&m,&n)&&m!=0&&n!=0)
{
getchar();
for(int i=0;i<m;i++)
{
scanf("%c",&p[i]);
}
getchar();
for(int i=0;i<n;i++)
{
scanf("%c",&t[i]);
}
init(p,m);
printf("移动表为:");
for(int i=0;i<26;i++)
{
printf("%d",table[i]);
}
printf("\n");
int c = horspool(t,p,n,m);
if(c==-1)
{
printf("匹配失败");
}
else
{
printf("匹配成功且文本的初始位置为:%d",c);
}
}
}