#include<stdio.h>
#include<string.h>
int next[100];
char p[100] = "ababa"; //匹配串
char s[100] = "ababcababa"; //源串
void getNext(char *cmp)
{
int k = -1;
int j = 0;
next[j] = k;
while(cmp[j] != '\0')
{
if(k == -1 || p[j] == p[k])
{
next[j+1] = k+1;
k++;
j++;
}else
{
k = next[k];
}
}
//打印next数组
//for( j = 0 ; j< strlen(cmp); j++)
// printf("%d ",next[j]);
}
int matchKPM(char *src, char *cmp)
{
int i = 0;
int j = 0;
int len = strlen(cmp);
while(src[i] != '\0')
{
//printf("\n%d %d \n",i,j);
if(j == -1 || src[i] == cmp[j])
{
i++;
j++;
}else
{
j = next[j];
}
if(j == len)
return i - j;
}
return -1;
}
void main()
{
int result = 0;
getNext(p);
result = matchKPM(s,p);
printf("%d",result);
}
[C语言]KMP算法
最新推荐文章于 2022-04-08 14:02:32 发布