字符串匹配算法--暴力匹配(Brute-Force-Match)C语言实现
一、前言
暴力匹配(Brute-Force-Match)是字符串匹配算法里最基础的算法,虽然效率比较低,但胜在方便理解,在小规模数据或对时间无严格要求的情况下可以考虑。
二、代码
#include <stdio.h>
#include <string.h>
int bf(char *l,char *s);
int main(void)
{
char s1[201],s2[201]; //根据需要设定数组大小
printf("母串:");
scanf("%s",s1);
printf("子串:");
scanf("%s",s2);
int a=strlen(s1),b=strlen(s2),re=0;
if(a>=b) //母串长度要比子串长
{
re=bf(s1,s2);
if(re==1)
printf("%s是%s的子串",s2,s1);
return 0;
}
else
printf("无法匹配");
return 0;
}
int bf(char *l,char *s)
{
if(!strcmp(l,s)) //如果两个字符串相同直接返回
return 1;
int ll=strlen(l),sl=strlen(s),di=ll-sl;
for(int i=0;i<=di;i++)
{
int temp=0;
for(int j=0;j<sl;j++)
{
if(l[i+j]==s[j])
continue;
else
{
temp=1;
break;
}
}
if(temp==1)
continue;
else if(temp==0)
return 1;
}
printf("子串不存在");
return 0;
}
三、主要思路
每次从子串与母串的第一个字符开始比较,若是匹配成功则继续下一个字符的匹配;若是匹配失败则从母串的下一个字符开始与子串的第一个字符重新匹配,循环往复直到匹配成功或者匹配失败。
四、分析时间复杂度
我们设子串长为m,母串长为n,同时m比n小的多。
在最好情况下,子串与母串的失配都是发生在第一个字符处,时间复杂度为O(m+n)。
在最坏的情况下,即子串每一次与母串失配都是在最后一个字母时,时间复杂度为O((m*n)。
字符串匹配算法--暴力匹配(Brute-Force-Match)C语言实现的更多相关文章
- 安全性测试入门:DVWA系列研究(一):Brute Force暴力破解攻击和防御
写在篇头: 随着国内的互联网产业日臻成熟,软件质量的要求越来越高,对测试团队和测试工程师提出了种种新的挑战. 传统的行业现象是90%的测试工程师被堆积在基本的功能.系统.黑盒测试,但是随着软件测试整体 ...
- 常用字符串匹配算法(brute force, kmp, sunday)
1. 暴力解法 // 暴力求解 int Idx(string S, string T){ // 返回第一个匹配元素的位置,若没有匹配的子串,则返回-1 int S_size = S.length(); ...
- Python 细聊从暴力(BF)字符串匹配算法到 KMP 算法之间的精妙变化
1. 字符串匹配算法 所谓字符串匹配算法,简单地说就是在一个目标字符串中查找是否存在另一个模式字符串.如在字符串 "ABCDEFG" 中查找是否存在 "EF" ...
- 数据结构(十六)模式匹配算法--Brute Force算法和KMP算法
一.模式匹配 串的查找定位操作(也称为串的模式匹配操作)指的是在当前串(主串)中寻找子串(模式串)的过程.若在主串中找到了一个和模式串相同的子串,则查找成功:若在主串中找不到与模式串相同的子串,则查找 ...
- DVWA Brute Force:暴力破解篇
DVWA Brute Force:暴力破解篇 前言 暴力破解是破解用户名密码的常用手段,主要是利用信息搜集得到有用信息来构造有针对性的弱口令字典,对网站进行爆破,以获取到用户的账号信息,有可能利用其权 ...
- DVWA全级别之Brute Force(暴力破解)
Brute Force Brute Force,即暴力(破解),是指黑客利用密码字典,使用穷举法猜解出用户口令. 首先我们登录DVWA(admin,password),之后我们看网络是否为无代理,: ...
- DVWA实验之Brute Force(暴力破解)- High
DVWA实验之Brute Force(暴力破解)- High 有关DVWA环境搭建的教程请参考: https://www.cnblogs.com/0yst3r-2046/p/10928380.ht ...
- DVWA实验之Brute Force(暴力破解)- Medium
DVWA实验之Brute Force(暴力破解)- Medium 有关DVWA环境搭建的教程请参考: https://www.cnblogs.com/0yst3r-2046/p/10928380. ...
- DVWA(二): Brute Force(全等级暴力破解)
tags: DVWA Brute Force Burp Suite Firefox windows2003 暴力破解基本利用密码字典使用穷举法对于所有的账号密码组合全排列猜解出正确的组合. LEVEL ...
随机推荐
- nodejs爬虫--抓取CSDN某用户全部文章
最近正在学习node.js,就像搞一些东西来玩玩,于是这个简单的爬虫就诞生了. 准备工作 node.js爬虫肯定要先安装node.js环境 创建一个文件夹 在该文件夹打开命令行,执行npm init初 ...
- 剑指offer-面试题54-二叉搜索树的第k大节点-中序遍历
/* 题目: 求二叉搜索树的第k大节点. */ /* 思路: 中序遍历. */ #include<iostream> #include<cstring> #include< ...
- GUI之JavaFX
一.JavaFX不深究系列,目的只是为了尝试使用GUI的方式来生成桌面应用. 二.JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者来设计.创建.测试.调试和部署富客户端程序,并且和Ja ...
- windows 停止和启动Redis
点击win+R 输入cmd 打开cmd窗口 然后输入命令 net stop redis 停止redis net start redis 启动redis
- Math, Date,JSON对象
Math 对象 Math是 JavaScript 的原生对象,提供各种数学功能.该对象不是构造函数,不能生成实例,所有的属性和方法都必须在Math对象上调用. 静态属性 Math对象的静态属性,提供以 ...
- shell awk学习3
需求: 某文件aa的内容如下: a/p1/p2b/pp1c/ppp1/ppp3d/p1/p2/p3e/p1/p2/p3/p4 期望输出结果: a /p1 /p2 b /pp1 c /ppp1 /ppp ...
- ubuntu下opencv CMakeLists.txt编写
# 声明要求的 cmake 最低版本 cmake_minimum_required( VERSION 2.8 ) # 声明一个 cmake 工程 project( pro ) # 设置编译模式 set ...
- 题解【洛谷P5767】[NOI1997]最优乘车
题面 一道很经典的最短路模型转换问题. 考虑如何建图. 我们可以发现,对于每一条公交线路,可以将这条线路上 可以到达的两个点 连一条权值为 \(1\) 的边. 获取一条公交线路上的每一个点可以使用读取 ...
- C# LINQ学习笔记三:LINQ to OBJECT之操作字符串
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5814204.html,记录一下学习过程以备后续查用. 一.统计单词在字符串中出现的次数 请注意,若要执行计数, ...
- JavaScript仿计算器案例源代码
效果图 index.html <!DOCTYPE html> <html> <head> <title></title> <link ...