c语言kmp算法输出所有匹配成功的位置
时间: 2023-08-15 12:17:50 浏览: 107
好的,我可以为您解答这个问题。
KMP算法是一种字符串匹配算法,它可以在一个主串中查找一个模式串出现的位置。在KMP算法中,主要是通过计算模式串的前缀和后缀的最长公共子串来避免重复计算。下面是C语言实现KMP算法输出所有匹配成功的位置的代码:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void getNext(int* next, char* pattern) {
int i = 0;
int j = -1;
int len = strlen(pattern);
next[0] = -1;
while (i < len) {
if (j == -1 || pattern[i] == pattern[j]) {
i++;
j++;
next[i] = j;
}
else {
j = next[j];
}
}
}
void kmp(char* text, char* pattern) {
int i = 0;
int j = 0;
int len1 = strlen(text);
int len2 = strlen(pattern);
int* next = (int*)malloc(sizeof(int) * len2);
getNext(next, pattern);
while (i < len1) {
if (j == -1 || text[i] == pattern[j]) {
i++;
j++;
}
else {
j = next[j];
}
if (j == len2) {
printf("Match found at position %d\n", i - len2 + 1);
j = next[j];
}
}
free(next);
}
int main() {
char text[100];
char pattern[100];
printf("Enter the text: ");
scanf("%s", text);
printf("Enter the pattern: ");
scanf("%s", pattern);
kmp(text, pattern);
return 0;
}
```
在这段代码中,我们定义了两个函数`getNext`和`kmp`。`getNext`函数用来计算模式串的next数组,`kmp`函数用来进行匹配并输出所有匹配成功的位置。
在主函数中,我们先输入文本串和模式串,然后调用`kmp`函数进行匹配。如果匹配成功,就会输出匹配成功的位置。
希望这个答案能够帮到您!
阅读全文