串的BF匹配算法

串的SF匹配算法,算法核心思想是:首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一直到T[M]为止;若S[1]和T[1]不等,则T向右移动一个字符的位置,再依次进行比较。如果存在k,1≤k≤N,且S[k+1…k+M]=T[1…M],则匹配成功;否则失败。该算法最坏情况下要进行M*(N-M+1)次比较,时间复杂度为O(M*N)。

// 串的匹配算法.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

void BFMacth(char *comment,char *str) //BF字符串匹配算法,用变量记录此时主串指针替代指针不用回溯
{
	int i=0,j=0;
	int sum=0;
	while(i<strlen(comment))
	{
		int a=i;   
		j=0;//模式串指针回溯
			while(comment[a]==str[j]&&j<strlen(str))
			{
				a++;
				j++;
			}
		if(j==strlen(str))
			cout<<a-2<<endl;
		i++;
	}

}
void BFMacth2(char *comment,char *str)  //BF字符串匹配算法,主串指针回溯
{
	int i=0,j=0;
	while(i<strlen(comment))
	{
		j=0;//模式串指针回溯
			while(comment[i]==str[j]&&j<strlen(str))
			{
				i++;
				j++;
			}
			if(j==strlen(str))
			cout<<i-2<<endl;
			i=i+1-j;   //主串指针回溯
		
	}

}

int _tmain(int argc, _TCHAR* argv[])
{
	char *comment="00010101001000000001010";
	char *str="10";
	BFMacth2(comment,str);
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值