#include<iostream>
#include<string>
using namespace std;
int nextval[255];
int strcmp(string s,string t);
int kmp(string s,string t,int pos);
void get_nextval(string t,int nextval[]);
int main()
{
string s="123456987";
string t;
while(cin>>t)
{
cout<<"在"<<kmp(s,t,1)<<"处匹配成功!"<<endl;
}
for(int i=1;i<t.length();++i)
cout<<nextval[i];
return 0;
}
void get_nextval(string t,int nextval[])
{
int i=0;
nextval[0]=0;
int j=0;
while(i<t.length())
{
if(j==0||t[i]==t[j])
{
++i; ++j;
if(t[i]!=t[j])
nextval[i]=j;
else
nextval[i]=nextval[j];
}
else j=nextval[j];
}
}
int kmp(string s,string t,int pos)
{
//int next[512];//定义一个数组
get_nextval(t,nextval);//获得数组
int i=0;
i=pos; int j=1;
while(i<=s.length()&&j<=t.length())
{
if(j==0||s[i]==t[j])
{ ++i; ++j;}
else j=nextval[j];
}
if(j>t.length())
return i-t.length();
else
return 0;
}
希望大侠帮帮忙不胜感激,真是修改了好几次,都郁闷透顶了……