BF算法模式匹配

#include<iostream>
using namespace std;
int findstr(char* mainstr, char* sonstr);
int main() {

	char mainstr[100], sonstr[100];
	while (1)
	{
		cin >> mainstr >> sonstr;
		int set = findstr(mainstr, sonstr);
		if (set == -1)
			cout << "匹配失败" << endl;
		else
		cout <<sonstr<<"位于"<<mainstr<<"的第"<< set+1 <<"位"<< endl;
	}
	return 0;
}
int findstr(char* mainstr, char* sonstr)
{
	int mainlen = strlen(mainstr), sonlen = strlen(sonstr), i = 0, j = 0;
	while (i < mainlen && j < sonlen)
	{
		if (mainstr[i] == sonstr[j])
		{
			i++;
			j++;
		}
		else
		{
			i = i - j + 1;
			j = 0;
		}
	}
	if (i >= mainlen)
		return -1;
	else
		return i - j;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
BF算法是一种普通的模式匹配算法,其思想是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法匹配的步骤如下: 假设目标串S长度为n,模式串P长度为m。 1. 从目标串S的第一个字符开始,依次与模式串P的第一个字符、第二个字符、第三个字符……第m个字符进行比较,若相等,则继续比较下一个字符;若不相等,则从目标串S的下一个字符开始,再次与模式串P的第一个字符进行比较。 2. 如果在比较过程中,发现目标串S的某个字符与模式串P的某个字符不相等,则需要回溯到上一次比较的位置,重新开始匹配。具体来说,假设在比较S[i]和P[j]时发现不相等,那么需要将i和j分别回溯到i-j+2和1的位置,然后重新开始匹配。 3. 如果在比较过程中,发现模式串P已经匹配完了所有字符,则说明匹配成功,返回目标串S中匹配成功的第一个字符的位置。 4. 如果在比较过程中,发现目标串S已经没有足够的字符可以与模式串P进行比较,则说明匹配失败,返回-1。 下面是一个示例,假设目标串S为"ababcababa",模式串P为"aba",则BF算法匹配的步骤如下: 第一趟:ababcababa 第二趟:ababcababa 第三趟:ababcababa 第四趟:ababcababa 第五趟:ababcababa 第六趟:ababcababa 第七趟:ababcababa 第八趟:ababcababa 第九趟:ababcababa 匹配成功,返回目标串S中匹配成功的第一个字符的位置,即2。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哈哈笑死哈哈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值