4.1 完成StrStr()函数,把主串中子串及以后的字符全部返回。例如主串“12345678”,子串“234”,返回“2345678”
#include<iostream>
#define MaxSize 10
using namespace std;
int Next[MaxSize];
void GetNext(string t){
Next[0]=-1;
int i=0,j=-1;//i为当前匹配的位置,j为失配后跳转的位置(最长公共前后缀的长度)
while(i<t.size()){
if(j==-1||t[i]==t[j]){
Next[++i]=++j;
}
else j=Next[j];
}
}
void StrStr(string s,string t){
int i=0,j=0;
int a=s.size(),b=t.size();//这步很重要!
while(i<a&&j<b){
if(j==-1||s[i]==t[j]){//j=-1表示第一次或者重新开始匹配
i++,j++;
}
else j=Next[j];//匹配失败
}
if(j>=t.size()){
for(int k=i-b;k<s.size();k++)
cout<<s[k];
}
else cout<<"不匹配";
}
int main()
{
string s,t;
cin>>s>>t;//主串 子串
GetNext(t);
StrStr(s,t);
return 0;
}
//12345678 234
//2345678