KMP模版
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int next[10010]; void getNext(char *str)
{
int j,k;
memset(next,0,sizeof(next));
j=0;
k=-1;
next[0]=-1;
while(str[j])
{
if(k==-1 || str[j]==str[k])
next[++j]=++k;
else
k=next[k];
}
}
int KMP(char *s,char *t) { getNext(t); int i,j,k; i=j=0; int num=0; while(s[i]!='\0') { if(s[i]==t[j]) { i++,j++; } else { if(next[j]!=-1) j=next[j]; else i++,j=0; } if(t[j]=='\0') { num++; //i-=j; //i++;进行重复匹配 j=0; } } return num; } int main() { char str1[]="ababababababa"; char str2[]="aba"; printf("%d\n",KMP(str1,str2)); return 0; }