C++模式匹配

来源:互联网 发布:2017软件行业寒冬 编辑:程序博客网 时间:2024/06/03 09:47
#include <iostream>using namespace std;struct SqString{    char data[20];    int length;};void GetNext(SqString t,int next[]){    next[0]=-1;    int j=0,k=-1;    while(j<t.length-1)    {        if((k==-1)||t.data[j]==t.data[k])        {            j++;            k++;            next[j]=k;        }        else            k=next[k];    }}int MKPIndex(SqString s,SqString t){    int next[t.length],i=0,j=0;    GetNext(t,next);    while(i<s.length&&j<t.length)    {        if(j==-1||s.data[i]==t.data[j])        {            i++;            j++;        }        else        j=next[j];    }    if(j>=t.length)        return(i-t.length);    else        return(-1);}int main(){    SqString S={'a','b','a','b','c','a','c','b','a','b'};    S.length=10;    SqString T={'a','b','c','a','c'};    T.length=5;    if(MKPIndex(S,T)==-1)    cout<<"不匹配";    else    cout<<"目标串从第"<<MKPIndex(S,T)+1<<"字符开始匹配";    return 0;}

详细解释请看:

http://blog.csdn.net/shitxian/article/details/7279125

0 0