kmp算法的实现

来源:互联网 发布:telnet 80端口不通 编辑:程序博客网 时间:2024/05/25 19:58
#include <stdio.h>#include <string.h>#include <assert.h>//计算next数组void get_next(char *pstr, int next[]){assert(pstr != NULL);int len = strlen(pstr);next[0] = -1;int pre = -1;int post = 0;while (post < len - 1){if (pre == -1 || pstr[post] == pstr[pre]){++ pre;++ post;next[post] = pre;}else{pre = next[pre];}}}//kmp算法int kmp(char *dstr, char *pstr, int next[]){assert(dstr != NULL && pstr != NULL);int i, j;int dlen = strlen(dstr);int plen = strlen(pstr);i = j = 0;while (i < dlen && j < plen){if (j == -1 || dstr[i] == pstr[j]){++i;++j;}else{j = next[j];}}if (j == plen)return i - j;elsereturn -1;}int main(){char dstr[20], pstr[10];int next[10], tmp;scanf("%s", pstr);scanf("%s", dstr);get_next(pstr, next);tmp = kmp(dstr, pstr, next);printf("%d\n", tmp);return 0;}

0 0
原创粉丝点击