1)算法原理

BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。

BF算法是一种蛮力算法。

举例说明:

S:  ababcababa

P:  ababa

BF算法匹配的步骤如下:

i=0, j=0

i=1, j=1

i=2,j=2

i=3, j=3

i=4, j=4(失败)

ababcababa

ababcababa

ababcababa

ababcababa

ababcababa

ababa

ababa

ababa

ababa

ababa

i=1,j=0(失败)

ababcababa

ababa

i=2,j=0

i=3,j=1

i=4,j=2(失败)

ababcababa

ababcababa

ababcababa

ababa

ababa

ababa

i=3,j=0(失败)

ababcababa

ababa

i=4,j=0(失败)

ababcababa

ababa

i=5,j=0

i=6,j=1

i=7,j=2

i=8,j=3

i=9,j=4(成功)

ababcababa

ababcababa

ababcababa

ababcababa

ababcababa

ababa

ababa

ababa

ababa

ababa

(2)代码实现

#include <stdio.h>

#include <string.h>

int BFMatch(char *s,char *p)

{

int i,j;

i =0;

while(i < strlen(s))

{

j = 0;

while(s[i] == p[j] &&j<strlen(p))

{

i++;

j++;

}

if(strlen(p) == j)

{

return i - strlen(p);

}

i = i - j + 1;                // 指针i回溯

}

return -1;

}

int main()

{

char *szSource = "ababcababa";

char *szSub = "ababa";

int index =BFMatch(szSource, szSub);

printf("目标串包含匹配串的起始位置:%d",index);

}

(3)运算过程

(a) i=0, j=0, s[0]==p[0];

i=1,j=1, s[1]==p[1];

i=2,j=2, s[2]==p[2];

i=3,j=3, s[3]==p[3];

i=4,j=4, s[[4]!=p[4], 第一次循环结束,i=4-4+1=1

(b) i=1, j=0, s[1]!=p[0],第二次循环结束, i=1-0+1=2

(c) i=2, j=0, s[2]==p[0];

i=3, j=1, s[3]==p[1];

i=4, j=2, s[4]!=p[2]; 第三次循环结束,i=4-2+1=3

(d) i=3, j=0, s[3]!=p[0];第四次循环结束,i=3-0+1=4

(e) i=4, j=0, s[4]!=p[0];第四次循环结束,i=4-0+1=5

(f) i=5, j=0, s[5]==p[0];

i=6, j=1; s[6]==p[1];

i=7, j=2, s[7]==p[2];

i=8, j=3, s[8]==p[3];

i=9, j=4, s[9]==p[4];

i=10, j=5, j==strlen(p), 最后一次循环结束,返回i-strlen(p) = 5

(4)运行结果

目标串包含匹配串的起始位置:5

字符串匹配之BF算法的更多相关文章

  1. 实现字符串匹配的KMP算法

    KMP算法是Knuth-Morris-Pratt算法的简称,它主要用于解决在一个长字符串S中匹配一个较短字符串s. 首先我们从整体来把我这个算法的思想. 字符串匹配的朴素算法: 我们容易想到朴素算法, ...

  2. Luogu 3375 【模板】KMP字符串匹配(KMP算法)

    Luogu 3375 [模板]KMP字符串匹配(KMP算法) Description 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来 ...

  3. 字符串匹配的 Boyer-Moore 算法

    上一篇文章,我介绍了 字符串匹配的KMP算法 但是,它并不是效率最高的算法,实际采用并不多.各种文本编辑器的” 查找” 功能(Ctrl+F),大多采用 Boyer-Moore 算法. 下面,我根据 M ...

  4. 字符串匹配的 KMP算法

    一般字符串匹配过程 KMP算法是字符串匹配算法的一种改进版,一般的字符串匹配算法是:从主串(目标字符串)和模式串(待匹配字符串)的第一个字符开始比较,如果相等则继续匹配下一个字符, 如果不相等则从主串 ...

  5. 字符串匹配的kmp算法 及 python实现

    一:背景 给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题. Knuth-Morris-Pratt 算法(简称 KMP)是解决这一问题的常 ...

  6. HDU 1711 Number Sequence (字符串匹配,KMP算法)

    HDU 1711 Number Sequence (字符串匹配,KMP算法) Description Given two sequences of numbers : a1, a2, ...... , ...

  7. 字符串匹配(KMP 算法 含代码)

    主要是针对字符串的匹配算法进行解说 有关字符串的基本知识 传统的串匹配法 模式匹配的一种改进算法KMP算法 网上一比較易懂的解说 小样例 1计算next 2计算nextval 代码 有关字符串的基本知 ...

  8. 字符串匹配的BF算法和KMP算法学习

    引言:关于字符串 字符串(string):是由0或多个字符组成的有限序列.一般写作`s = "123456..."`.s这里是主串,其中的一部分就是子串. 其实,对于字符串大小关系 ...

  9. 字符串匹配(BF算法和KMP算法及改进KMP算法)

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include<cstring> ...

随机推荐

  1. java 之word转html

    jar包  链接: https://pan.baidu.com/s/13o2CZTwM-Igx6wcoyEu_ug 密码: n95q package com.bistu.service; import ...

  2. git使用问题一新建本地仓库添加远程合并推送

    1,git远程新建仓库demo 2,git本地初始化仓库demo 3,git本地添加远程仓库 git remote add <name> <url> 4,git把远程仓库pul ...

  3. HDU 1024:Max Sum Plus Plus 经典动态规划之最大M子段和

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  4. Python测试进阶——(6)Bash脚本启动Python监控程序并传递PID

    用HiBench执行Hadoop——Sort测试用例,进入 /HiBench-master/bin/workloads/micro/sort/hadoop 目录下,执行命令: [root@node1 ...

  5. SqlServer查看锁表与解锁

    某些情况下,sqlserver的表会被锁住,比如某个会话窗口有数据一直没提交,窗口又没关闭,这时表就会被锁住 其他任何连接查询表数据时都不会返回 这时需要手工杀掉产生死锁的会话ID,才能恢复正常 查看 ...

  6. python 关于异常处理 try...except... 的两个案例

    输入若干个成绩,求所有成绩的平均分.每输入一个成绩后询问是否继续输入下一个成绩,回答“yes”就继续输入下一个成绩,回答“no”就停止输入成绩. numbers = [] #使用列表存放临时数据 wh ...

  7. CLion的使用

    配置远程Linux编译器 实现目标:1.将项目中的源码和target和Linux服务器同步.2.代码在服务器端运行 配置ToolChains setting -> Build,Execution ...

  8. 014.Oracle数据库,取本周第一天(星期一), 取本周最后一天(星期天)

    /*取本周第一天(星期一),取本周最后一天(星期天)*/ SELECT trunc( SYSDATE, AS 星期一 , trunc( SYSDATE, AS 星期天 FROM dual; 效果如下: ...

  9. Delphi另一个多线程函数:BeginThread用法

    Delphi另一个多线程函数:BeginThread━━━━━━━━━━━━━━━━━━━━━━━━━━ Delphi也提供了一个相同功能的类似函数:function BeginThread(    ...

  10. Web UI设计师需要了解的用栅格化系统指导网页设计

    出处:https://www.jianshu.com/p/9838f217f4f6 致敬,,, ---------------------------------------------------- ...