请使用c++写出kmp算法的具体代码
时间: 2024-04-29 12:23:02 浏览: 116
以下是KMP算法的C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
// 计算next数组
void getNext(char *p, int next[]) {
int len = strlen(p);
int j = 0, k = -1;
next[0] = -1;
while (j < len - 1) {
if (k == -1 || p[j] == p[k]) {
j++;
k++;
next[j] = k;
} else {
k = next[k];
}
}
}
// KMP算法
int KMP(char *s, char *p) {
int slen = strlen(s);
int plen = strlen(p);
int i = 0, j = 0;
int next[plen];
getNext(p, next);
while (i < slen && j < plen) {
if (j == -1 || s[i] == p[j]) {
i++;
j++;
} else {
j = next[j];
}
}
if (j == plen) {
return i - j;
} else {
return -1;
}
}
int main() {
char s[] = "hello world";
char p[] = "world";
int pos = KMP(s, p);
if (pos == -1) {
printf("Not found\n");
} else {
printf("Found at position %d\n", pos);
}
return 0;
}
```
在该代码中,`getNext`函数用于计算模式串`p`的next数组,`KMP`函数用于进行KMP算法匹配操作。在主函数中,我们使用`KMP`函数在文本串`s`中查找模式串`p`的出现位置。如果`KMP`函数返回-1,表示未找到;否则,返回的是第一次匹配成功的位置。
阅读全文