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);
}
#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);
}
相关文章推荐
- C++实现Kmp字符匹配算法的优化版
- 字符串匹配暴力匹配法和KMP匹配算法对比
- 算法导论-第32章-字符串匹配:Knuth-Morris-Pratt(KMP)算法C++实现
- 字符串匹配高效算法 KMP-c++代码
- Kmp字符匹配算法优化C++实现
- 字符串匹配算法(暴力匹配和KMP)
- 【字符串匹配】KMP(implement strStr()), 正则匹配(Wildcard Matching),2-dim 动规(regular expression)
- KMP字符串匹配算法
- 【字符串匹配】——KMP(看毛片算法)——深入讲解next数组的求解
- 数据结构与算法之KMP 字符串匹配
- 字符串匹配算法-KMP详解
- 4种字符串匹配算法:KMP(下)
- 字符串匹配之KMP 算法
- KMP 字符串匹配算法讲解
- 字符串匹配算法之KMP
- 字符串匹配 KMP 算法
- 字符串匹配算法KMP详细解释——深入理解
- 字符串匹配算法--KMP
- C/C++——朴素的模式匹配算法和KMP模式匹配算法
- 字符串匹配(KMP 算法 含代码)