用KMP算法我想要查找出主串s中的所有子串t1并用t2替换,但是在实现查找时为什么KMP算法只查找了一次,应该怎么修改
比如char s[]="aaabaaaab";//主串s
char t1[]="aa";//子串t1
char t2[]="aaaab";//子串t2
应该查找次吧,怎么样才能有5个返回值呢?求教
代码如下:
#include<iostream>
#include<string>
using namespace std;
char s[]="aaabaaaab";//主串s
char t1[]="aa";//子串t1
char t2[]="aaaab";//子串t2
void get_next(char *t, int next[])//求解next数组
//next数组长度应大于或等于strlen(t)
{
int j, k;
next[0]=k=-1; j=1;
while(t[j])
if(k==-1||t[j-1]==t[k]) next[j++]=++k;
else k=next[k];
}
int index_kmp(char *s, char *t, int next[])
//要求next值已求取
{
int i=0,j=0;
while(s[i]&&t[j])
{
if(j==-1||s[i]==t[j])
{
//if(s[i]==t[j]) cout<<"i="<<i<<" ";
i++;
j++;
}
else j=next[j];
}
if(!t[j]) return i-j;//若匹配成功则函数返回和子串中第一个字符相等的字符在主串中的序号
return -1; //返回-1表示匹配失败
}
void main()
{
int n=0;
int next[10];
get_next(t2,next);
for(int i=0;i<=strlen(t2)-1;i++)
cout<<next[i]<<" ";
cout<<endl<<"KMP Success!"<<endl;
cout<<index_kmp(s,t2,next)<<" ";
cout<<endl;
}