//-------------------------------KMP算法
/*
字串匹配算法
*/
#include <stdio.h>
#include <string.h>
int next[100];
char a[100];
char b[100];
void GetNext(int bLen)
{
int x,y,k,j;
j = 0;
k = -1;
next[0] = -1;
while(j<bLen)
{
if(k==-1||b[j]==b[k])
{
j++;
k++;
next[j] = k;
}
else
{
k = next[k];
}
}
}
int KMP(int aLen,int bLen)
{
int i,j;
i = j = 0;
while(i<aLen && j<bLen)
{
if(j==-1||a[i]==b[j])
{
i++;
j++;
}
else
{
j = next[j];
}
}
if(j>=bLen)
{
return(i-bLen+1);
}
else
{
return -1;
}
}
int main()
{
printf("请输入主串:\n");
scanf("%s",a);
printf("请输入子串:\n");
scanf("%s",b);
int aLen,bLen;
aLen = strlen(a);
bLen = strlen(b);
GetNext(bLen);
int i = KMP(aLen,bLen);
printf("%d\n",i);
return 0;
}
KMP算法
最新推荐文章于 2024-11-16 09:45:51 发布