c++的kmp_index
时间: 2023-11-06 15:30:29 浏览: 38
以下是 C++ 中 KMP 算法的字符串匹配实现,返回匹字符串的起始下标:
```cpp
#include <>
#include <string>
#include <vector>
using std;
vector<int>(string pattern) {
int = pattern.size();
<int> next(n);
[0] = -1 int j = -;
for (int i = ; i < n; i {
while (j 0 && pattern[i] != pattern[j + 1]) {
j = next[j];
}
if (pattern[i] == pattern[j + 1]) {
j++;
}
next[i] = j;
}
return next;
}
int kmpIndex(string text, string pattern) {
vector<int> next = getNext(pattern);
int n = text.size(), m = pattern.size();
int j = -1;
for (int i = 0; i < n; i++) {
while (j >= 0 && text[i] != pattern[j + 1]) {
j = next[j];
}
if (text[i] == pattern[j + 1]) {
j++;
}
if (j == m - 1) {
return i - j;
}
}
return -1;
}
int main() {
string text = "hello world!";
string pattern = "world";
int pos = kmpIndex(text, pattern);
if (pos != -1) {
cout << "匹配成功,起始下标为:" << pos << endl;
} else {
cout << "匹配失败!" << endl;
}
return 0;
}
```
其中 getNext 函数是求出模式串 pattern 的 next 数组,kmpIndex 函数是实现 KMP 算法的字符串匹配过程。