C语言kmp算法简单示例和实现原理探究
以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货。最近有空,翻出来算法导论看看,原来就是这么简单(下不说程序实现,思想很简单)。
模式匹配的经典应用:从一个字符串中找到模式字串的位置。如“abcdef”中“cde”出现在原串第三个位置。从基础看起
朴素的模式匹配算法
A:abcdefg B:cde
首先B从A的第一位开始比较,B++==A++,如果全部成立,返回即可;如果不成立,跳出,从A的第二位开始比较,以此类推。
/* *侯凯,2014-9-16 *功能:模式匹配 */ #include<iostream> #include<string> usingnamespacestd;
intindex(char*a,char*b) { inttarindex=0; while(a[tarindex]!='\0') { inttarlen=tarindex; intpatlen; for(patlen=0;b[patlen]!='\0';patlen++) { if(a[tarlen++]!=b[patlen]) { break; } } if(b[patlen]=='\0') { returntarindex; } tarindex++; } return-1; } intmain() { char*a="abcdef"; char*b="cdf"; cout<<index(a,b)<<endl; system("Pause"); }