//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;
}
else
i=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算法
,我是参照了《大话数据结构》这本书。