/***************************************************************************************
--程序描述: KMP字符匹配算法
--修改时间: 2009.5.30
--修改人: 吴强
--修改原因: 从前写的代码不够规范
--编辑工具and语言 Turbo C for Windows, C语言
--输入要求: 先输入母串,然后输入待比较子串,字符串(不大于20字符)以回车表示结束
*****************************************************************************************/
#include
#include
int next[20];
void get_next(char *t, int next[])
{
int i=0;
int j=0;
next[0]=0;
//strlen函数返回是unsigned int类型,需要转换为int才不会有警告
while ( i< (int)strlen(t) )
{
if ( j==0 || t[i]==t[j-1] )
{
++i;
++j;
next[i]=j;
}
else
{
j=next[j-1];
}
}
}
int Index_kmp(char *str, char *s)
{
int i=1;
int j=1;
while ( i<= (int)strlen(str) && j<= (int)strlen(s) )
{
if ( j==0 || str[i-1]==s[j-1] )
{
++i;
++j;
}
else
{
j=next[j-1];
}
}
if ( j> (int)strlen(s) )
{
return( i-strlen(s) );
}
else
{
return(0);
}
}
void main()
{
char str[20];
char s[20];
gets(str);
gets(s);
get_next(str,next);
printf(" %d/n",Index_kmp(str,s));
}
kmp字符匹配算法
最新推荐文章于 2025-04-13 17:39:05 发布
1059

被折叠的 条评论
为什么被折叠?



