KMP算法的代码实现一

来源:互联网 发布:软件编程自学网站 编辑:程序博客网 时间:2024/04/24 11:09

//kmp.h

#ifndef KMP_H#define KMP_H#include <iostream>using namespace std;const  int Maxsize=50;class Char{public:Char(char a[],int longth);void print();void printnext();void GetNext(char T[]);private:char T[Maxsize];int next[Maxsize];int longth;};void Char::print(){cout<<"字符串为:"<<endl;for(int i=0;i<longth;i++)cout<<T[i];cout<<endl;}Char::Char(char a[],int longth){this->longth=longth;for(int i=0;i<longth;i++)T[i]=a[i];T[longth]='\0';}void Char::GetNext(char T[]){int k=0,i=-1;this->next[0]=-1;while(k<longth-1){if(i==-1||T[i]==T[k]){++i;++k; next[k]=i;}elsei=next[i];}next[longth]='\0';}void Char::printnext(){cout<<"next[j]为:"<<endl;for(int i=0;i<longth;i++)cout<<"next["<<i<<"]="<<next[i]<<endl;}#endif


//next.cpp

#include "kmp.h"void main(){int longth=0;cout<<"请输入长度(最长为50):";cin>>longth;while(longth>Maxsize){cout<<"请重新输入:";cin>>longth;}char*a=new char[longth];    //一开始忘了申请长度为longth的空间cout<<"请输入字符串:\n"<<endl;for(int i=0;i<longth;i++){cout<<"第"<<i+1<<"个字符为:";cin>>a[i];}Char c(a,longth);c.print();c.GetNext(a);c.printnext();delete []a;}

注:
void Char::GetNext(char T[])
KMP算法,我是参照了《大话数据结构》这本书。



0 0
原创粉丝点击