写一个C语言的KMP算法
时间: 2023-12-15 08:52:37 浏览: 71
KMP算法C语言实现.
好的,下面是一个简单的C语言KMP算法的实现:
```
#include <stdio.h>
#include <string.h>
void getNext(char* pattern, int* next)
{
int len = strlen(pattern);
int i = 0, j = -1;
next[0] = -1;
while (i < len)
{
if (j == -1 || pattern[i] == pattern[j])
{
i++;
j++;
next[i] = j;
}
else
{
j = next[j];
}
}
}
int kmp(char* text, char* pattern, int* next)
{
int n = strlen(text);
int m = strlen(pattern);
int i = 0, j = 0;
while (i < n && j < m)
{
if (j == -1 || text[i] == pattern[j])
{
i++;
j++;
}
else
{
j = next[j];
}
if (j == m)
{
return i - m;
}
}
return -1;
}
int main()
{
char text[100], pattern[100];
int next[100];
printf("请输入文本串:");
scanf("%s", text);
printf("请输入模式串:");
scanf("%s", pattern);
getNext(pattern, next);
int pos = kmp(text, pattern, next);
if (pos == -1)
{
printf("文本串中没有出现模式串!");
}
else
{
printf("模式串在文本串中出现的位置是:%d", pos);
}
return 0;
}
```
以上就是一个简单的C语言KMP算法的实现。请注意,此代码仅供参考,实际使用可能需要进行一些修改和优化。
阅读全文