经典算法之暴力匹配算法(字符串)

/************************
author's email:wardseptember@gmail.com
date:2017.12.17
暴力匹配算法
************************/
/*
对于一个串中的某子串的定位操作称为串的模式匹配,其中待定位的子串称为模式串。算法的基
本思想:从主串的第一个位置起和模式串的第一个字符开始比较,如果相等,则继续逐一比较后
续字符;否则从主串的第二个字符开始,再重新用上一步的方法与模式串做比较,以此类推,
直到比较完模式串中的所有字符。若匹配成功,则返回模式串在主串中的位置;若匹配不成功,则
返回一个可区别与主串的位置标记,如“-1”。
*/
#include<iostream>
#include <stdio.h>
using namespace std;
#define maxSize 50
int BF(char *str, char *substr);//暴力匹配算法
void main() {
	char str[50] = "ABABCABCACBAB";
	char substr[50] = "ABCAC";
	int result;

	cout << "BF算法匹配结果:" << endl;
	result = BF(str, substr);
	if (result != -1)
		cout << "主串与子串在主串的第" << result << "个字符(首字符的位置为0)处首次匹配" << endl;
	else
		cout << "无匹配子串" << endl;
}
int BF(char *str, char *substr) {//暴力匹配算法
	int i = 0, j = 0, k = i;
	while (i < strlen(str) && j < strlen(substr)) {
		if (str[i] == substr[j]) {
			++i;
			++j;
		}
		else {
			j = 0;
			i = ++k;//匹配失败,i从主串的下一位置开始,k中记录了上一次的起始位置
		}
	}
	if (j >= strlen(substr)) {
		return k;
	}
	else
		return -1;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值