您的位置:首页 > 编程语言 > C语言/C++

C++版字符串匹配算法之传统匹配算法加KMP字符串匹配算法

2012-02-29 20:10 567 查看
#include <iostream>

#include <string>

#define MAXSIZ 100

using namespace std;

class Match{

public:

Match(){

size=0;

str="";

}

Match(string st){

size=st.length();

str=st;

}

void Set(string st){

size=st.length();

str=st;

}

~Match(){}

void NormalMatch(string &)const;

void CreateNext(string &);

void KMPMatch(string &)const;

private:

int next[MAXSIZ];

int size;

string str;

};

void Match::NormalMatch(string &dest)const{

int i=0,j=0;

while(i<str.length()-dest.length()+1&&j<dest.length()){

if(dest[j]==str[i]){

i++;

j++;

}

else{

i=i-j+1;

j=0;

}

}

if(j==dest.length()){

cout<<"NormalMatch sucess!"<<endl;

cout<<"Start from No."<<i-j+1<<" letter."<<endl;

return;

}

else cout<<"NormalMatch failed!"<<endl;

return;

}

void Match::CreateNext(string &dest){

int k=-1,j=0;

next[0]=-1;

while(j<dest.length()){

if(dest[k]==dest[j]||k==-1){

k++;

j++;

next[j]=k;

}

else k=next[k];

}

/*int i=0;

while(i<size)cout<<next[i++];

cout<<endl;*/

}

void Match::KMPMatch(string &dest)const{

int i=0,j=0;

while(i<str.length()&&j<dest.length()){

if(str[i]==dest[j]||j==-1){

i++;

j++;

}

else

j=next[j];

}

if(j==dest.length()){

cout<<"KMPMatch sucess!"<<endl;

cout<<"Start from No."<<i-j+1<<" letter."<<endl;

return;

}

else cout<<"KMPMatch failed!"<<endl;

return;

}

void main(){

Match obj;

string res,dest;

cout<<"Input the res string:"<<endl;

cin>>res;

obj.Set(res);

cout<<"Input the dest string:"<<endl;

cin>>dest;

obj.NormalMatch(dest);

obj.CreateNext(dest);

obj.KMPMatch(dest);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: