BF算法(蛮力匹配)

输入主串a,模式b

b在a中的位置

1.在串a和串b中设置比较的下标i=0,j=0;

2.重复下述操作,直到a或b的所有字符均比较完毕:

  2.1如果a[i]等于b[i],继续比较a和b的下一对字符;

  2.2负责,下标i和j分别回溯,开始下一趟匹配;

3.如果b中所有字符均比较完,则匹配成功,返回本趟匹配的起始位置;负责匹配失败,返回0;

#include<iostream>
#define N 100000
using namespace std;
char a[N],b[N];

int BF(char a[],char b[])//BF算法
{
    int i = 0,j = 0;//i,j变量分别表示在主串和模式串的位置
    int start = 0;//start记录主串回溯的位置
    while(a[i] != ‘\0‘ && b[j] != ‘\0‘)
    {
        if(a[i] == b[j])
        {
            i++;
            j++;
        }
        else
        {
            start++;
            i = start;
            j = 0;
        }
    }
    if(b[j] == ‘\0‘)//如果是模式串所有匹配完成,即匹配成功,返回位置
        return start + 1;
    else//否则匹配失败
        return 0;
}

int main()
{
    int t;
    cin >> t;//t个测试样例
    while(t--)
    {
        int flag;//模式匹配成功的位置
        cin >> a >> b;//读入字符串
        flag = BF(a,b);
        cout << flag << endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/biaobiao88/p/11669826.html

时间: 2024-11-12 18:03:14

BF算法(蛮力匹配)的相关文章

[算法系列之十二]字符串匹配之蛮力匹配

引言 字符串匹配是数据库开发和文字处理软件的关键.幸运的是所有现代编程语言和字符串库函数,帮助我们的日常工作.不过理解他们的原理还是比较重要的. 字符串算法主要可以分为几类.字符串匹配就是其中之一.当我们提到字符串匹配算法,最基本的方法就是所谓的蛮力解法,这意味着我们需要检查每一个文本串中的字符是否和匹配串相匹配.一般来说我们有文本串和一个匹配串(通常匹配串短于文本串).我们需要做的就是回答这个匹配串是否出现在文本串中. 概述 字符串蛮力匹配法的原理非常简单.我们必须检查匹配串的第一个字符与文本

BF算法与KMP算法

BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果. BF算法实现: 1 int BF(char S[],char T[],int pos) 2 {//c从第pos位开始搜索匹配 3 int i=pos,j=0; 4 while(S[i+j]!='\0'&&T[j]!='\0')

简单易懂的KMP,NEXT数组,BF算法(实例讲解)!!!

去了360面试,问了一个关于KMP的知识点,呀,完全忘了啊,太不应该了,然后就打算看看这个KMP,,, 看了好多关于KMP算法的书籍和资料,总感觉没有说的很清楚,为什么会产生next数组,为什么给出了那么简短的程序,没有一个过程,而有的帖子虽然next及其字符串匹配说的很清楚,但是推理的一些过程相当复杂,比较抽象,今天在这里简单的提一下我的理解,尽可能的把这个过程讲的简单,容易理解 从模式匹配之初:我们先是研究的是BF算法,鉴于我们经常行的需要回溯,总是做一些无用功,为了提高算法的时间度和空间度

算法——蛮力法之顺序查找和蛮力字符串匹配

接着昨天的选择排序和冒泡排序之后,今天来实现一下顺序查找和蛮力字符串匹配两个算法. 顺序查找就是将给定的查找键和列表周玲的每个元素进行比较,直到找到一个匹配成功的元素返回该元素下标,查找成功,或者查找整个列表二没有匹配元素,查找失败.这里记录一下限位器版顺序查找方法.限位器就是指将查找键添加到列表最后,这样在查找的过程中,不用再每次都判断是否到达列表尾部来判断查找是否失败,而是在查找结束后,判断匹配元素下标是否小于n(假设列表有n个元素)来判断查找是否成功.下面是限位器版顺序查找算法: 限位器版

BF算法

BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符:若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果. 1 //BF算法 2 #include <iostream> 3 4 using namespace std; 5 6 int main(){ 7 char dst[] = "ababa"; 8 char src[] = "ab

模式匹配-BF算法

/***字符串匹配算法***/ #include<cstring> #include<iostream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; #define MAXSTRLEN 255 //用户可在255以内定义最长串长 typedef char SString[MAXSTRLEN+1]; //0号单元存放串的长度 Status StrAs

串、串的模式匹配算法(子串查找)BF算法、KMP算法

串的定长顺序存储#define MAXSTRLEN 255,//超出这个长度则超出部分被舍去,称为截断 串的模式匹配: 串的定义:0个或多个字符组成的有限序列S = 'a1a2a3--.an ' n = 0时为空串串的顺序存储结构:字符数组,串的长度就是数组末尾'\0'前面的字符个数数组需在定义时确定长度,有局限性数组的最大长度二:串的堆分配存储表示typedef struct { char *ch; //若是非空串,则按串长分配存储区 //否则ch为空 int length; //串长度}HS

数据结构 第4章 串、数组和广义表 单元小结(1)重点 BF算法

BF算法 考试必考 !!!!!背下来!!!! int lndex_BF(string s,string t,int pos) {//返回模式t在主串s中第pos个字符开始第一次出现的位置下标 //若不存在,则返回值为-1 //其中,t非空,1<=pos<=StrLength(s) int i,j; i = pos-1;//下标 j = 0;//下标 while(i<s.length()&&j<t.length()){ if(s[i] == t[j]) { ++i;

5月15日(链串中截取子串和BF算法)

BF算法属于一种蛮力算法,用来查找子串在串中的位置. // 截取子串 int getsstring(linkstr *s,char ch[],int k,int n){ linkstr *sl; sl = s; if(k<0 || n<0) return -1; for(int i = 0; i<k ;i++){ sl = sl->next; } for(int j; j<n; j++){ ch[j] = sl->ch; sl = sl->next; } retu