使用c语言实现kmp和next算法包括main函数
时间: 2023-12-01 07:04:42 浏览: 79
C语言中实现KMP算法的实例讲解
以下是使用 C 语言实现 KMP 算法和 Next 算法的代码,包括 main 函数:
```
#include <stdio.h>
#include <string.h>
void getNext(char *pattern, int *next) {
int i = 0, j = -1;
next[0] = -1;
while (i < strlen(pattern)) {
if (j == -1 || pattern[i] == pattern[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
}
int kmp(char *text, char *pattern) {
int i = 0, j = 0;
int *next = (int *)malloc(sizeof(int) * strlen(pattern));
getNext(pattern, next);
while (i < strlen(text) && j < strlen(pattern)) {
if (j == -1 || text[i] == pattern[j]) {
i++;
j++;
} else {
j = next[j];
}
}
free(next);
if (j == strlen(pattern)) {
return i - j;
} else {
return -1;
}
}
int main() {
char text[] = "abababcabababd";
char pattern[] = "ababd";
int pos = kmp(text, pattern);
printf("Position: %d\n", pos);
return 0;
}
```
在 main 函数中,我们定义了一段文本和一个模式串,并调用 kmp 函数来查找模式串在文本中的位置。在 kmp 函数中,我们首先使用 getNext 函数来计算模式串的 next 数组,然后使用双指针 i 和 j 来匹配文本和模式串。如果匹配成功,i 和 j 都加 1,否则将 j 移动到 next[j] 的位置(即回溯)。
注意,在使用完 next 数组后,我们需要释放内存,以免造成内存泄漏。
阅读全文