主题:KMP算法
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void GetNext(string & str,vector<int> & next)
{
int i=0,j=-1;
next[i]=-1;
int temp2=str.size();
while(i<temp2)
{
if(j==-1 || str[i]==str[j])
{
++i;
++j;
if(str[i]!=str[j])
{
next[i]=j;
}
else
{
next[i]=next[j];
}
}
else
{
j=next[j];
}
}
}
int Index(string & mStr,string & cStr,int pos)
{
int i=pos,j=-1;
vector<int> next(cStr.size(),-1);
GetNext(cStr,next);
for(vector<int>::size_type ix=0;ix!=next.size();ix++)
{
cout<<next[ix]<<" ";
}
cout<<endl;
int temp=cStr.size();
while(i<mStr.size() && j<temp)
{
if(j==-1 || mStr[i]==cStr[j])
{
++i;
++j;
}
else
{
j=next[j];
}
}
if(j>=temp)
return (i-temp); //此处返回报错,请求高手指点
return -1;
}
int main(void)
{
string mStr="yincheng";
string cStr="en";
int temp=Index(mStr,cStr,0);
if(temp==-1)
{
cout<<"无子串!"<<endl;
}
else
{
cout<<"开始匹配位置:"<<temp<<endl;
}
return 0;
}