kmp字符匹配算法

/***************************************************************************************
--程序描述:		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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值