串的模式匹配KMP算法

来源:互联网 发布:软件工程硕士答辩ppt 编辑:程序博客网 时间:2024/05/04 04:11
#include <iostream>#include <string>using namespace std;//next函数值算法void getNext(string substr,int next[]){int i=0,j=-1;next[0] = -1;while(i<substr.length()-1){if(j==-1||substr[i]==substr[j]){i++;j++;next[i]=j;}else{j=next[j];}}}//改进后的next函数值算法void getNextVal(string substr,int nextval[]){int i=0,j=-1;nextval[0] = -1;while(i<substr.length()-1){if(j==-1||substr[i]==substr[j]){i++;j++;if(substr[i]!=substr[j]){nextval[i]=j;}else{nextval[i]=nextval[j];}}else{j=nextval[j];}}}//KMP算法主函数int indexKMP(string mainstr,string substr,int pos){const int SIZE = 50;int i=pos,j=0;int next[SIZE];getNext(substr,next);//或者调用getNextVal(substr,next);while(i<(int)mainstr.length()&&j<(int)substr.length()){if(j==-1||mainstr[i]==substr[j]){i++;j++;}else{j=next[j];}}if(j>=substr.length()){return i-substr.length();}return -1;}int main(){string mainStr = "wrsdsegegf ffsegeggs";string subStr = "segeggs";int pos = indexKMP(mainStr, subStr, 0);cout<<pos<<endl;cin.get();return 0;}

原创粉丝点击