字符串的模式匹配操作可以通过Brute Force算法来实现。字符串匹配操作即是查看S串(目标串或主串)中是否含有T串(模式串或子串),如果在主串中查找到了子串,则模式匹配成功,返回模式串中的第一个字符在主串中的位置;如果未找到,则模式匹配失败,返回-1。

Brute Force算法,即暴风算法,是简单的模式匹配算法,其思想是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。Brute Force算法简单,易于实现;进行了回溯,效率不高。KMP算法是Brute Force的一种改进算法。

以下是测试code:

#include <string>
#include <vector>
#include <opencv2/opencv.hpp>
#include "common.hpp"// ============================ Brute Force ================================
typedef std::tuple<int, int> brute_force_result; // <status, pos>int brute_force(const std::string& str, const std::string& sub, brute_force_result& result)
{std::get<0>(result) = -1;std::get<1>(result) = -1;int length_str = str.length(), length_sub = sub.length();if (length_str < length_sub) return 0;for (int i = 0; i < length_str - length_sub + 1; ++i) {int count{ 0 };for (int j = 0; j < length_sub; ++j) {const char& c1 = str.at(i + count);const char& c2 = sub.at(j);if (c1 == c2) ++count;else break;}if (count == length_sub) {std::get<0>(result) = 0;std::get<1>(result) = i;}}return 0;
}int test_brute_force_string_match()
{const std::string str{ "abcdABCD EFaadfk32!@#34flasf dafe" };const std::vector<std::string> sub{ "abcde", "ABCD EF", "fe", "!@#", "asf dafe", "afea"};for (const auto& val : sub) {fbc::brute_force_result result;fbc::brute_force(str, val, result);fprintf(stdout, "string match result: status: %d, pos: %d\n",std::get<0>(result), std::get<1>(result));}return 0;
}

执行结果如下:

GitHub:  https://github.com/fengbingchun/NN_Test

Brute Force算法介绍及C++实现相关推荐

  1. 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)

    #笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...

  2. DVWA学习(三)Brute Force(暴力破解)

    BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相 ...

  3. JavaScript实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码)

    JavaScript实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码) bfMaximumSubarray.js完整源代码 bfMaximumSuba ...

  4. 吴昊品游戏核心算法 Round 7 —— 熄灯游戏AI(有人性的Brute Force)(POJ 2811)

    暴力分为两种,一种属于毫无人性的暴力,一种属于有人性 的暴力.前面一种就不说了,对于后面一种情况,我们可以只对其中的部分问题进行枚举,而通过这些子问题而推导到整个的问题中.我称之为有人性的Brute ...

  5. Go 语言实现字符串匹配算法 -- BF(Brute Force) 和 RK(Rabin Karp)

    今天介绍两种基础的字符串匹配算法,当然核心还是熟悉一下Go的语法,巩固一下基础知识 BF(Brute Force) RK(Rabin Karp) 源字符串:src, 目标字符串:dest: 确认des ...

  6. Unit 2: Password Cracking 2.1 Password Cracking Brute Force Attacks

    >> In a future unit, we'll learn how attackers can get possession of a database containing has ...

  7. 网络安全入门之 Burp Suite 暴力破解 DVWA Brute Force Low

    文章目录 1. 背景 2. 准备工作 2.1. 靶场环境 2.2. 安装破解工具 3. 破解过程 3.1. 代理请求 3.2. 拦截请求 3.3. 填装弹药 3.4. 设置岗哨 3.5. 开始攻击 4 ...

  8. 新手指南:DVWA-1.9全级别教程之Brute Force

    目前,最新的DVWA已经更新到1.9版本(http://www.dvwa.co.uk/),而网上的教程大多停留在旧版本,且没有针对DVWA high级别的教程,因此萌发了一个撰写新手教程的想法,错误的 ...

  9. Brute force and exhaustive search

    Brute force and exhaustive search(蛮力和彻底搜索) Brute force is a straightforward approach to solving a pr ...

最新文章

  1. 用 Flask 来写个轻博客 (19) — 以 Bcrypt 密文存储账户信息与实现用户登陆表单
  2. Cocos Creator JS 时间戳日期转换
  3. Codeforses 185 A Plant 思维 规律
  4. ENVI修复图像坏点扩展补丁
  5. 1^2+2^2+……+n^2的公式证明
  6. 双稳态电路的两个稳定状态是什么_从双稳态到双“更”稳态 ——叶芳伟课题组在拓扑光子学研究方向上取得新进展...
  7. nodejs的一些玩法
  8. 【C++入门】C++类和对象
  9. C++11 右值引用与移动语义
  10. NLP ---文本情感分析
  11. 第3章 数据库操作SQL语言---数据库原理及应用
  12. FlashCC导入使用greensock(TweenLite)包
  13. 共享打印机服务器系统64位,win7系统64位和winXP 32位共享网络打印机的操作方法...
  14. CDA Day1-3 Excel公式常用函数跟课学习
  15. linux下低格u盘,拯救U盘,一个靠谱的强制低格的工具
  16. 【有利可图网】PS实战系列:PS制作人像印章效果
  17. 夜神模拟器无法安装Charles证书
  18. html 编辑cad图,cad制图是什么
  19. 计算机公式怎么计算合计,excel表格函数数据求和公式是什么-Excel中怎么用公式计算合计...
  20. Python百日百行代码挑战-day7,游戏模块学习,tkinter

热门文章

  1. vector容器中erase(删除)的使用
  2. Open3d学习计划—高级篇 3(点云全局配准)
  3. JS如何深度复制对象和数组,避免指针变量引用修改值
  4. python中的daemon守护进程实现方法
  5. LTE SIB1时频资源
  6. Python爬虫入门教程 54-100 博客园等博客网站自动评论器
  7. winform解析json
  8. 浏览器加载、解析、渲染的过程
  9. ORA-00959: tablespace 'PSAPTEMP' does not exist
  10. 开源:ASP.NET MVC+EF6+Bootstrap开发框架