编写一个程序,用串实现kmp算法
时间: 2023-07-20 13:07:34 浏览: 85
以下是用串实现KMP算法的C++代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
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];
}
}
}
int kmp(char *s, char *p) {
int slen = strlen(s), plen = strlen(p);
int i = 0, j = 0;
int *next = new int[plen];
getNext(p, next);
while (i < slen && j < plen) {
if (j == -1 || s[i] == p[j]) {
i++;
j++;
} else {
j = next[j];
}
}
delete[] next;
if (j == plen) {
return i - j;
} else {
return -1;
}
}
int main() {
char s[100], p[100];
cout << "请输入文本串:";
cin >> s;
cout << "请输入模式串:";
cin >> p;
int pos = kmp(s, p);
if (pos == -1) {
cout << "未找到模式串!" << endl;
} else {
cout << "模式串在文本串中的位置为:" << pos << endl;
}
return 0;
}
```
以上代码中,getNext函数用于求出模式串p的next数组,kmp函数用于在文本串s中查找模式串p,返回匹配到的位置。主函数中,用户输入文本串和模式串,调用kmp函数查找模式串在文本串中的位置。
阅读全文