有关C++字符串KMP匹配问题

来源:互联网 发布:网络电影怎么发行 编辑:程序博客网 时间:2024/06/18 04:02

网址:http://zhidao.baidu.com/question/496978699945785084.html

#include <iostream>using namespace std;void GetNext(int longth,char T[],int (&next)[5]){int k=-1,j=0;next[0]=-1;while(j<longth){if(k==-1 || T[k]==T[j]){++k;++j;next[j]=k;}elsek=next[k];}}int KMP(char S[],char T[],int next[5]){int i=0,j=0;while((S[i]!='\0')&&(T[j]!='\0')){if(S[i]==T[j]){++i;++j;}else{j=next[j];if(j==-1){++i;++j;}}}if(T[j]=='\0') {cout<<"i="<<i<<endl;return (i-j+1);}else return 0;}int main(){char S[10]="abcabcacb";char T[6]="abcac";cout<<T[0]<<endl;int next[5];GetNext(5,T,next);cout<<"T[0]="<<T[0]<<endl;         //这里输出的是空格,为什么呢?应该输出是a    for(int i=0;i<5;i++)cout<<"next["<<i<<"] = "<<next[i]<<endl;      //这里i=0,j=0 跳过了上面while((S[i]!='\0')&&(T[j]!='\0'))循环cout<<KMP(S,T,next)<<endl;return 0;}



为什么会这样?

0 0
原创粉丝点击