您的位置:首页 > 理论基础 > 数据结构算法

数据结构(之)KMP算法

2013-10-13 22:38 399 查看
// KMP_algorithm.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include<iostream>using namespace std;class KMP{private:public://KMP();void matchStr(char source[], char match[]);void getNext(char match[], int length, int next[]);int findStr(char source[], int slength, char match[], int mlength, int next[]);};int KMP::findStr(char source[], int slength, char match[], int mlength, int next[]){int i=0, j=0;while(i<slength && j<mlength){if(j==-1 || source[i]==match[j]){i++;j++;}elsej=next[j];}if(j>=mlength-1)return i-mlength+1;elsereturn 0;}void KMP::matchStr(char source[], char match[]){int slength = 0;int mlength = 0;while(source[slength]!='\0')slength++;while(match[mlength]!='\0')mlength++;int* next=new int[mlength];getNext(match, mlength, next);int result;result=findStr(source,  slength, match,  mlength, next);cout<<"Result is: "<<result<<endl;delete[] next;}void KMP::getNext(char match[], int mlength, int next[]){int i=0, k=-1;//int next[length];next[0]=-1;while(i<mlength-1){while(k>=0 && match[i]!= match[k])k=next[k];i++;k++;if(match[i] == match[k])next[i]=next[k];elsenext[i]=k;}}int main(){char source[]="babddebdbdy";char match[]="bdy";KMP kp;kp.matchStr(source, match);}
结果如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构