KMP算法:
#include <iostream>
#include<fstream>
#include<string>
using namespace std;
char text[100];
char pattern[10];
char next[10];
int plen;
int tlen;
void getNext(){
int i=0,j=-1;
next[0]=-1;
while(i<plen){
if(j==-1||pattern[i]==pattern[j]){
i++;j++;
next[i]=j;
}else{
j=next[j];
}
}
}
int kmp(){
int i=0,j=0;
int cnt=0;
while(i<tlen&&j<plen){
if(text[i]==pattern[j]||j==-1){
i++;j++;
}else{
j=next[j];
}
if(j==plen){
cnt++;
j=next[j];
}
}
return cnt;
}
int main()
{
strcpy(text,"abbabbdabb");
strcpy(pattern,"abb");
tlen=strlen(text);
plen=strlen(pattern);
getNext();
cout<<kmp()<<endl;
return 0;
}