用c语言写个kmp代码
时间: 2023-12-03 11:47:09 浏览: 69
KMP算法 C语言实现
4星 · 用户满意度95%
以下是使用C语言编写KMP算法的代码:
```c
#include <stdio.h>
#include <string.h>
void getNext(char *pattern, int *next) {
int len = strlen(pattern);
int j = 0;
next[0] = 0;
for (int i = 1; i < len; i++) {
while (j > 0 && pattern[i] != pattern[j]) {
j = next[j - 1];
}
if (pattern[i] == pattern[j]) {
j++;
}
next[i] = j;
}
}
void kmp(char *text, char *pattern) {
int n = strlen(text);
int m = strlen(pattern);
int next[m];
getNext(pattern, next);
int j = 0;
for (int i = 0; i < n; i++) {
while (j > 0 && text[i] != pattern[j]) {
j = next[j - 1];
}
if (text[i] == pattern[j]) {
j++;
}
if (j == m) {
printf("Pattern found at index %d\n", i - m + 1);
j = next[j - 1];
}
}
}
int main() {
char text[100], pattern[100];
printf("Enter the text string: ");
gets(text);
printf("Enter the pattern string: ");
gets(pattern);
kmp(text, pattern);
return 0;
}
```
在该代码中,我们首先定义了 `getNext()` 和 `kmp()` 函数来实现KMP算法。 `getNext()` 函数计算模式字符串的前缀和后缀的最长匹配长度,以便在模式字符串与文本字符串不匹配时跳过尽可能多的字符。 `kmp()` 函数则使用 `getNext()` 函数来在文本字符串中查找模式字符串的出现位置。
在主函数中,我们先输入文本字符串和模式字符串,然后调用 `kmp()` 函数来查找模式字符串在文本字符串中的出现位置。
阅读全文