用c++写一个KMP算法
时间: 2023-07-15 19:10:02 浏览: 70
KMP算法是一种字符串匹配算法,可以快速在文本串中找到模式串的出现位置。
下面是一个用C语言实现的KMP算法的示例代码:
```c
#include <stdio.h>
#include <string.h>
// 计算 next 数组
void get_next(char *p, int *next) {
int p_len = strlen(p);
next[0] = -1;
int k = -1;
int j = 0;
while (j < p_len - 1) {
// p[k] 表示前缀,p[j] 表示后缀
if (k == -1 || p[k] == p[j]) {
++k;
++j;
next[j] = k;
} else {
k = next[k];
}
}
}
// KMP 匹配字符串
int kmp_match(char *s, char *p) {
int s_len = strlen(s);
int p_len = strlen(p);
int *next = (int*)malloc(sizeof(int) * p_len);
get_next(p, next);
int i = 0;
int j = 0;
while (i < s_len && j < p_len) {
// ①如果 j = -1,或者当前字符匹配成功(即 S[i] == P[j]),都令 i++,j++
if (j == -1 || s[i] == p[j]) {
i++;
j++;
} else {
// ②如果 j != -1,且当前字符匹配失败(即 S[i] != P[j]),则令 i 不变,j = next[j]
// next[j] 即为 j 所对应的 next 值
j = next[j];
}
}
free(next);
if (j == p_len) {
// 匹配成功
return i - j;
} else {
// 匹配失败
return -1;
}
}
int main() {
char *s = "BBC ABCDAB ABCDABCDABDE";
char *p = "ABCDABD";
int result = kmp_match(
阅读全文