用C语言写一段KMP算法
时间: 2023-05-25 16:05:52 浏览: 125
KMP算法C语言实现.
以下是用C语言写的KMP算法代码:
```c
#include <stdio.h>
#include <string.h>
void computeLPSArray(char* pat, int M, int* lps)
{
int len = 0;
lps[0] = 0;
int i = 1;
while (i < M)
{
if (pat[i] == pat[len])
{
len++;
lps[i] = len;
i++;
}
else
{
if (len != 0)
{
len = lps[len - 1];
}
else
{
lps[i] = 0;
i++;
}
}
}
}
void KMP(char* pat, char* txt)
{
int M = strlen(pat);
int N = strlen(txt);
int lps[M];
computeLPSArray(pat, M, lps);
int i = 0;
int j = 0;
while (i < N)
{
if (pat[j] == txt[i])
{
i++;
j++;
}
if (j == M)
{
printf("Found pattern at index %d \n", i - j);
j = lps[j - 1];
}
else if (i < N && pat[j] != txt[i])
{
if (j != 0) j = lps[j - 1];
else i++;
}
}
}
int main()
{
char txt[] = "AABAACAADAABAABAA";
char pat[] = "AABA";
KMP(pat, txt);
return 0;
}
```
该代码实现了KMP算法的主要部分:计算最长前缀后缀(LPS)数组和在文本中查找模式的过程。在此示例中,程序搜索文本"AABAACAADAABAABAA"中的模式"AABA",并在第0和第9个索引处找到该模式。
阅读全文