分为两个部分
首先需声明
char A[],B[];
int F[],n,m,i,j;
scanf("%s%s",&A[1],&B[1]);
A[0]=B[0]=' ';
n=strlen(A)-1;
m=strlen(B)-1;
//需加入<cstring>
第一部分为求Fail数组
F[1]=j=0;
for(i=2;i<=m;i++)
{
while(j>0&&B[j+1]!=B[i])j=F[j];
if(B[j+1]==B[i])j++:
F[i]=j;
}
//此时B[ ]为子串
第二部分
j=0;
for(i=1;i<=n;i++)
{
while(j>0&&B[j+1]!=A[i])j=F[j];
if(B[j+1]==A[i])j++;
if(j==m)
{
cout<<"match:"<<i-m+1<<endl;
j=F[j];
}
}