字符串匹配BF

/*****输入两个字符串,寻找第二个是第一个的字串;此算法是kmp相比古老算法效率更高;
************/
#include<stdio.h>
#include<string.h>
void Getnext(char *t,int *next)
{
	int i,j,k;
	k=strlen(t);
	next[0]=0;
	i=0;j=-1;
	while(i<k)
	{
		if(j==-1||t[i]==t[j])
		{
			i++;j++;
			next[i]=j;
		}
		else j=next[j];
	}
}
int KMP(char *s,char *t,int *next)
{
	int k,h,j,i;
	k=strlen(s);
	h=strlen(t);
	j=0;i=0;
	while(i<k&&j<h)
	{
		if(j==0||s[i]==t[i])
		{
			i++;
			j++;
		}
		else j=next[j];
	}
	if(j==h)
		return i-h+1;
	else return -1;
}

int main()
{
	int pos;
	int next[101];
	char s[1001],t[101];
	scanf("%s%s",s,t);
	Getnext(t,next);
	pos=KMP(s,t,next);
	if(pos==-1)
	{
		printf("很遗憾没有匹配成功!\n");
	}
	else printf("成功啦pos=%d\n",pos);
	return 0;
}
																										   

  

转载于:https://www.cnblogs.com/liyongqiang/archive/2012/04/08/2437515.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值