BF算法(暴力破解算法)

在主串里匹配子串字符搜索

上面一排是主串,下面一排是子串,接下来在主串里面搜索子串 

首先,对于这个问题有一个很单纯的想法:从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位。这有什么难的?

我们可以这样初始化:

 之后我们只需要比较i指针指向的字符和j指针指向的字符是否一致。如果一致就都向后移动,如果不一致,如下图:

 A和E不相等,那就把i指针移回第1位(假设下标从0开始),j移动到模式串的第0位,然后又重新开始这个步骤:

 

 下面写了个例子:在主串abcdefg里搜索子串cde    代码如下:

#include "stdio.h"
int main()
{
	char s[]="abcdefg\0";  //主串 
	char t[]="cde\0";	//子串		 
	int i=0,j=0;		//定义 i j 用于做主串子串的下标 
	while(s[i]!='\0' && t[j]!='\0')		//当主串和子串都没到结尾 
	{
		if(s[i]==t[j])		//当主串和子串当前字符相同时 
		{
			i++;			//同时++ 往后遍历 
			j++;
		}
		else{				//如果不相同 
			i=i-j+1;		//主串则回起点的下一个字符重新开始匹配 
			j=0;			//子串回到0重新开始 
		}
	}
	if(t[j]=='\0')			//如果匹配到子串结尾了 
	{
		printf("%d",i-j);	//则输出子串在主串的哪一个下标开始的 
	}
	else{
		printf("-1");		//如果搜索不出来 则输出-1 
	}
	 
}

运行结果:输出的是字符串数组的下标

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wiyoo0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值