#include <iostream>
using namespace std;
char s[1000],t[1000],tmp;
int next[1000],Length_s,Length_t;
void get_next(){ // 改进的next值的求法
int i=1;
int j=0;
next[1]=0;
while (i<Length_t){
if ( (j==0) || (s[i]==t[j]) ){
++i; ++j;
if (s[i]==t[j]) next[i]=next[j];
else next[i]=j;
}else j = next[j];
}
}
int work(){
int i=1;
int j=1;
while (i<=Length_s && j<=Length_t){
if (j==0 || s[i]==t[j]){
++i;
++j;
}else j = next[j];
}
if (j>Length_t) return i-Length_t;
else return 0 ;
}
int main(){
cout << "请输入母串,以#结束" << endl;
cin >> tmp;
while (tmp !='#'){
s[++Length_s]=tmp;
cin >> tmp;
}
cout << "请输入子串,以#结束" << endl;
cin >> tmp;
while (tmp !='#'){
t[++Length_t]=tmp;
cin >> tmp;
}
cout << work() << endl ;
return 0;
}
KMP C++实现代码
最新推荐文章于 2024-07-20 15:08:47 发布