KMP匹配算法是用于匹配字符串的经典算法,对KMP的详解或教程我就不写了,自认写不好。推荐两个自己认为不错的链接给想了解的朋友:
1、介绍的很详细:
2、看大多数教程都理解不了KMP的同学,看下这篇:
贴上我的代码吧,C++实现。
#includeusing namespace std;//next生成函数void KMP_next(int *next,const char * t){ int i =0; int j =-1; next[0] =-1; const int tlen =strlen(t); while(i =tlen) return (i-j); else return -1;}int main(){ char src[15] ="ababdababababe"; char t[6] ="ababe"; cout< <
对于会的朋友来说,代码比较清晰了,很容易懂,对于还没理解的同学,可能仅看代码不容易看出头绪!可以看看别的详解之类的文章!
这里需要提一点,就是在调试程序的过程(VS2010),delete []next 的时候总是崩溃,后来找到原因是访问next数组的时候越界了,但不明白的是越界访问怎么会影响到后来的delete操作,我的猜想是:在new int[MAX]时,分配的空间不止MAX个单位大小,会在其后增加些许信息,delete释放内存时,会使用这些信息。由于越界访问将这些“信息”擦除了,所以会导致delete的失败。
不过对于这一猜想还需要继续验证,如果有朋友了解,望赐教! 当然,上面的程序已经将越界问题优化掉了!
仅以此文记录学习路程及对自己的鼓励!