心得:原认为kmp算法只是遍历一遍找到便退出,只记录1,其实不然,kmp遍历全串才结束
源代码如下:
#include <iostream>
#include<string.h>using namespace std;
char Text[1005],Pattern[1005];
int Next[1005];
void get_nextval( char *T,int next[])
{
int j = 0, k = -1;
next[0] = -1;
while ( T[j] !='\0' )
{
if (k == -1 || T[j] == T[k])
{
++j; ++k;
if (T[j]!=T[k])
next[j] = k;
else
next[j] = next[k];
}
else
k = next[k];
}
}
int main()
{ char text[1005],pattern[1005];
while(cin>>text>>pattern)
{int count=0;
strcpy(Text,text);
strcpy(Pattern,pattern);
get_nextval(pattern,Next);
int i=0,j=0;
while(Text[i]&&Pattern[j])
{
if(Text[i]==Pattern[j])
{i++;j++;}
else
{if(Next[j]!=-1)
j=Next[j];
else{j=0;i++;}
}
if(Pattern[j]=='\0')
{count++;
j=0;}
}
cout<<count<<endl;
}
return 0;
}
注:未经同意不得...