kmp算法代码C语言
时间: 2024-05-22 13:07:43 浏览: 131
KMP算法是一种字符串匹配算法,用于在一个主串中查找一个模式串出现的位置。该算法的时间复杂度为O(m+n),其中m为模式串长度,n为主串长度。
以下是KMP算法的C语言代码示例:
```
#include <stdio.h>
#include <string.h>
void getNext(char *p, int *next)
{
int i = 0, j = -1;
next = -1;
int len = strlen(p);
while(i < len - 1)
{
if(j == -1 || p[i] == p[j])
{
i++;
j++;
next[i] = j;
}
else
{
j = next[j];
}
}
}
int kmp(char *s, char *p)
{
int i = 0, j = 0;
int slen = strlen(s);
int plen = strlen(p);
int next[plen];
getNext(p, next);
while(i < slen && j < plen)
{
if(j == -1 || s[i] == p[j])
{
i++;
j++;
}
else
{
j = next[j];
}
}
if(j == plen)
{
return i - j;
}
else
{
return -1;
}
}
int main()
{
char s[100], p[100];
printf("请输入主串:\n");
scanf("%s", s);
printf("请输入模式串:\n");
scanf("%s", p);
int pos = kmp(s, p);
if(pos != -1)
{
printf("在主串中匹配到模式串,位置在%d\n", pos);
}
else
{
printf("在主串中未匹配到模式串\n");
}
return 0;
}
```
以上是KMP算法的简单实现,代码中getNext函数是获取模式串的next数组的函数,kmp函数则是进行匹配的函数。
阅读全文