字符串匹配算法--暴力匹配(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 ...
随机推荐
- Redis-异步消息
关于异步消息,大家都知道,如下: 这些用起来都是比较复杂的,RabbitMQ先要创建Exchange,在创建Queue,还要将Queue和Exchange通过某种规则绑定起来.发消息之前要指定rout ...
- ARC 064 F-Rotated Palindromes
题意 问有多少个长度为 \(N\) 且字符集大小为 \(K\) 的字符串可以通过回文串旋转 (把第一个字符移到最后)若干次得到.\(N,K\le 10^9\) 做法 设\(f_i\)为最小周期为\(i ...
- QQ常用表情
以下表情均为QQ官方表情原图,版权归QQ所有,禁止用于商业用途.  ![3nEaFJ.p ...
- CLion快捷键设置
CLion自动格式化的快捷键默认为Ctrl+Alt+L,代码前后跳转CRTL+ALT+Left或CRTL+ALT+Right 但有时会和系统的快捷键冲突,需要修改CLion里面的快捷键 如图:sett ...
- C# sqlite 事务提交多个语句,提升插入速度
private SQLiteConnection connection; private SQLiteCommand command; private SQLiteTransaction transa ...
- Codeforces Round #622(Div 2)C2. Skyscrapers (hard version)
题目链接 : C2. Skyscrapers (hard version) 题目描述 : 与上一道题类似,只是数据范围变大, 5e5, 如果用我们原来的方法,铁定是超时的. 考察点 : 单调栈,贪心, ...
- c++编程之内存模型
我们在编程的时候,无可避免要申明变量,在这个变量可以是在()中,可以在{}中,也可以直接在外面,也可以用new的方式.那么当我们在申明变量的时候,实质上我们所做的工作是:关联了一个内存模型! 上代码: ...
- C#设计模式学习笔记:简单工厂模式(工厂方法模式前奏篇)
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7551373.html,记录一下学习过程以备后续查用. 一.引言 简单工厂模式并不属于GoF23里面的设计模式 ...
- mui下拉上拉(明一)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- javascript当中arguments用法
8)arguments 例 3.8.1<head> <meta http-equiv="content-type" content="text/h ...