
#include#include //计算next函数值 int get_next(char *T,int *next) { int i,j; i=1; next[1]=0; j=0; while(i strlen(T)) { return i-(int)strlen(T); } return -1; } int main() { char S[100]; char T[100]; printf("输入主串:n"); gets(S); printf("输入子串:n"); gets(T); int next[100]; int a= Index_KMP(S,T); printf("字符串匹配成功,位置为:%d",a); return 0; }
利用KMP算法进行字符串匹配,若匹配成功,则返回子串在主串上第一个匹配到的位置。
next数组的首位通常设置为-1,求next数组的时候,对于模式串的位置j,考察patten[j-1],查找字符串patten[j-1]的最大相等的前缀和后缀,假设最大相等的前缀和后缀长度为k,则有k使得p[0]p[1]p[2].......p[k-2]p[k-1]=p[j-k]p[j-k+1].........p[j-2]p[j-1]。
KMP模式匹配算法其实就是利用部分已经匹配的有效信息,保持主串坐标不回溯,通过修改模式串的坐标,使模式串尽量移动到有效位置。KMP模式匹配算法的关键就在于next数组。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)