用C++实现KMP算法
时间: 2023-10-31 11:05:03 浏览: 114
C++实现的KMP算法
KMP算法是一种在文本串中查找模式串的字符串匹配算法。C语言实现KMP算法的方法如下:
1. 预处理next数组:next数组记录模式串中的前缀和后缀的最长公共匹配长度,以便在文本串匹配失败时快速定位下一个匹配位置。
2. 初始化两个指针i和j,分别指向文本串和模式串的开头。
3. 如果文本串和模式串中的字符相匹配,则i和j同时向后移动。
4. 如果文本串和模式串中的字符不匹配,则j回退到next[j]的位置,i保持不变。
5. 当j移动到模式串的末尾时,表示匹配成功,返回i的位置;否则,当i移动到文本串的末尾时,表示匹配失败,返回-1。
以下是一份示例代码:
```
#include <stdio.h>
#include <string.h>
void get_next(const char *p, int next[])
{
int p_len = strlen(p);
int j = 0;
int k = -1;
next[0] = -1;
while (j < p_len - 1)
{
if (k == -1 || p[j] == p[k])
{
++j;
++k;
next[j] = k;
}
else
{
k = next[k];
}
}
}
int kmp_search(const char *s, const char *p)
{
int s_len = strlen(s);
int p_len = strlen(p);
int i = 0;
int j = 0;
int next[
阅读全文