c语言kmp算法代码实现
时间: 2023-11-19 08:54:09 浏览: 117
KMP算法 C语言实现
4星 · 用户满意度95%
KMP算法是一种字符串匹配算法,它的核心是求解next数组,而next数组的求解是根据一个公式进行编写的。下面是一个C语言实现KMP算法的代码,其中包括了求解next数组和KMP算法的实现。
```
#include <stdio.h>
#include <string.h>
void get_next(char s[], int next[]);
int KMP(char s1[], char s2[], int next[]);
int main() {
int i = 0;
int next[1000];
char s2[] = "ce";
char s1[] = "ababce";
get_next(s2, next);
i = KMP(s1, s2, next);
printf("%d\n", i);
return 0;
}
void get_next(char s[], int next[]) {
int len = 0;
int i = 0; //后缀
int j = -1; //前缀
next[0] = -1; //第一位符前面没有前缀,由公式知设为-1.
len = strlen(s);
while (i < len) {
if (j == -1 || s[i] == s[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
}
int KMP(char s1[], char s2[], int next[]) {
int i = -1;
int j = -1;
int len1 = strlen(s1);
int len2 = strlen(s2);
while (i < len1 && j < len2) {
if (j == -1 || s1[i] == s2[j]) {
i++;
j++;
} else {
j = next[j];
}
}
if (j >= len2)
return i - len2 + 1;
else
return 0;
}
```
阅读全文