数据结构串的模式匹配算法--BF暴力匹配

news/2024/9/19 2:09:52/ 标签: 算法, 数据结构, c语言

BF(Brute-Force,暴力匹配)算法是一种简单的字符串匹配算法,其基本思想是将目标串S逐个字符与模式串P进行比对,直到找到匹配或遍历完S为止。下面是一个使用C语言实现的BF算法示例:

#include <stdio.h>  
#include <string.h>  // BF算法实现  
// 参数:text是文本串,pattern是模式串  
// 返回值:如果找到模式串,则返回模式串在文本串中的起始位置(从0开始计数);如果未找到,则返回-1  
int BF(const char* text, const char* pattern) {  int textLen = strlen(text);  int patternLen = strlen(pattern);  // 遍历文本串  for (int i = 0; i <= textLen - patternLen; i++) {  int j;  // 遍历模式串  for (j = 0; j < patternLen; j++) {  // 如果当前字符不匹配,则跳出内层循环  if (text[i + j] != pattern[j]) {  break;  }  }  // 如果j等于模式串长度,说明模式串匹配成功  if (j == patternLen) {  return i; // 返回模式串在文本串中的起始位置  }  }  // 未找到匹配的模式串  return -1;  
}  int main() {  const char* text = "hello world, welcome to the world of programming!";  const char* pattern = "world";  int index = BF(text, pattern);  if (index != -1) {  printf("Pattern found at index: %d\n", index);  } else {  printf("Pattern not found.\n");  }  return 0;  
}

第二种代码实现,是基于链串的结构体

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  #define SIZE 50  typedef struct Node {  char data[SIZE + 1];  int length;  struct Node* next;  
} Node;  Node* createNode(const char* str) {  Node* newnode = (Node*)malloc(sizeof(Node));  if (newnode == NULL) {  perror("malloc failed");  exit(EXIT_FAILURE);  }  strncpy(newnode->data, str, SIZE);  newnode->data[SIZE] = '\0';  newnode->length = strlen(newnode->data);  newnode->next = NULL;  return newnode;  
}  int BF(Node* s1, Node* s2) {  int i = 0, j = 0;  while (i < s1->length - s2->length + 1) {  j = 0;  while (j < s2->length && s1->data[i + j] == s2->data[j]) {  j++;  }  if (j == s2->length) {  return i; // 返回匹配开始的位置  }  i++; // 移动到文本串的下一个字符  }  return -1; // 未找到匹配  
}  int main() {  Node* arr1 = createNode("fanjunxi");  Node* arr2 = createNode("xi");  printf("arr1: %s\n", arr1->data);  printf("arr2: %s\n", arr2->data);  int index = BF(arr1, arr2);  if (index != -1) {  printf("子串开始于位置: %d\n", index);  } else {  printf("无符合的子串\n");  }  free(arr1);  free(arr2);  return 0;  
}


http://www.ppmy.cn/news/1520245.html

相关文章

用友U8 CRM exportdictionary.php SQL注入漏洞复现

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件,旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 exportdictionary.php 文件存在SQL注入漏洞,未经身份验证的攻击者通过漏洞执行任意S…

全志Linux磁盘操作基础命令

磁盘操作 fdisk命令 fidsk是一个用来创建和维护磁盘设备分区的一个实用工具。 [ubuntubook:~]$ fdisk -l //列出当前系统所有的磁盘设备 [ubuntubook:~]$ fdisk /dev/sdc //操作设备节点为 /dev/sdc的一个设备。p : 显示所有的分区。d: 删除分区。n: 创建一个新的分区。t : …

使用QT开发一些特殊相机的思路:个人经验

前言&#xff1a; 去年使用QT开发过Dalsa线扫相机的应用程序&#xff0c;去获取数据&#xff0c;显示图片&#xff0c;实时分析等&#xff0c;测试demo的链接如下&#xff1a; Dalsa线扫相机-二次开发-QT-C 可用Demo&#xff08;一&#xff09;_dalsa开发-CSDN博客 前段时间&am…

基于Java+SpringBoot+Vue+MySQL的在线装修管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的在线装修管理系统【附源码文档】、前后…

解决Springboot项目Maven下载依赖速度慢的问题

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

数学建模笔记

1.三级表的制作 打开word找到插入并点击表格 随机生成一个表格&#xff0c;然后去修改表格样式&#xff0c;把格式应用于选到标题行&#xff0c;然后点击格式&#xff0c;选到边框和底纹&#xff0c;把宽度改为1.5磅&#xff0c;然后点击上下俩个田字&#xff0c;预览图会出现…

RabbitMQ中间件监控指标解读

监控易是一款全面的IT监控软件&#xff0c;能够实时监控各种IT资源和应用&#xff0c;确保系统的稳定运行。在RabbitMQ中间件的监控方面&#xff0c;监控易提供了详尽的监测指标&#xff0c;帮助用户深入了解RabbitMQ集群的运行状态和性能表现。 一、集群监控&#xff08;sdds…

飞思相机存储卡格式化数据如何恢复?提供全面指南

在数字摄影时代&#xff0c;‌飞思相机以其卓越的成像质量和专业的性能&#xff0c;‌赢得了众多摄影师的青睐。‌然而&#xff0c;‌即使是专业的设备也难免遭遇数据丢失的困境&#xff0c;‌尤其是当存储卡不幸被格式化时。‌面对这一突如其来的灾难&#xff0c;‌许多摄影师…

thinkphp8 定时任务 addArgument

在ThinkPHP8中&#xff0c;我们可以使用addArgument方法来添加命令行参数。这个方法允许我们定义命令行参数&#xff0c;并且可以指定参数的模式&#xff08;例如&#xff1a;是否必须&#xff0c;是否可选&#xff09;。 以下是一个简单的例子&#xff0c;演示如何在ThinkPHP…

SAP2 - 系统管理课程 System Administration Course

资料来源 -- SAP System Administration SAP System Administration SAP Systems Administrators are responsible for maintaining the ongoing reliability, performance, management, and support of SAP application environments supporting education, research, admini…

9月1日起,这些知识产权新规正式实施

9月1日起&#xff0c;一批知识产权新规将正式实施&#xff01;一起来看&#xff0c;哪些与你相关&#xff1f; 9月1日起&#xff01;《高价值发明专利培育工作指南》《专利申请预审规范》地方标准实施 日前&#xff0c;贵阳市市场监督管理局批准发布《高价值发明专利培育工作指…

Apache + Tomcat + ajp 协议配置

前端 web 服务器使用 apache 的好处就不在赘述&#xff0c;这里重点讲一下如何使用 ajp 协议和 http 协议与后端 tomcat 服务器通信的区别。 apache作为代理服务器可以使用 http 协议与后端 tomcat 服务器进行通信&#xff0c;也可以使用 ajp 协议与 tomcat 通信。两者的主要区…

linux --- CentOS 7 环境下编译安装OpenCV For Java

linux环境下编译安装OpenCV For Java(CentOS 7) 1、基础环境安装 在这里插入代码片# 安装 SCL 源 yum install -y centos-release-scl # 安装 gcc8 g++8 yum install -y devtoolset-8-gcc*#设置环境变量 echo source /opt/rh/devtoolset-8/enable >> /etc/profile#使环…

产品概述Tektronix泰克TCP0030A电流探头TCP0030原装二手

产品概述 Tekronix TCP0030 AC/DC 电流探头是一款高性能且易于使用的探头&#xff0c;它通过可选测量范围增强了带宽&#xff0c;同时还提供了低电流测量能力和精度。Tektronix TCP0030 探头专为具有 TekVPI 探头接口的示波器而设计。 Tektronix TCP0030 AC/DC 电流探头的功能…

哲学家进餐问题

哲学家进餐问题&#xff08;The Dining Philosophers Problem&#xff09;是计算机科学中的经典同步问题&#xff0c;由荷兰计算机科学家埃德斯赫伯戴克斯特拉&#xff08;Edsger Dijkstra&#xff09;提出。该问题用来说明如何避免死锁&#xff08;deadlock&#xff09;和资源…

[学术论文] KBS期刊介绍及投稿流程学习笔记

该专栏主要是论文投稿的记录笔记&#xff0c;希望对初学者有所帮助&#xff0c;也希望大家论文都能命中。这篇文章主要介绍人工智能一区期刊Knowledge-Based Systems的投稿笔记&#xff0c;希望您喜欢&#xff01; 文章目录 一.期刊介绍二.投稿地址及模板1.投稿地址2.LaTex下载…

c++命令模式

一.概念 命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将请求封装为对象&#xff0c;从而使您可以使用不同的请求、队列或日志请求&#xff0c;以及支持可撤销操作。命令模式的主要组成部分包括&#xff1a; 命令接口&#xff08;Comman…

【DEV工具-IDEA】idea的光标变成黑块了?

项目场景&#xff1a; 解决&#xff1a;windows&#xff1a;按一下insert键。

详细解说:ansible自动化运维项目

Ansible是一种强大的自动化运维工具&#xff0c;主要用于配置管理、应用部署、任务执行等场景。它基于Python开发&#xff0c;通过SSH协议进行通信&#xff0c;无需在目标主机上安装客户端或守护进程&#xff0c;使得部署和管理变得更加简单和安全。 Ansible的特点 简单易用&…

Maven <parent> 标签的作用及使用详解

在使用 Maven 进行项目构建时&#xff0c;<parent> 标签是一个非常重要的配置元素。它允许子模块继承父模块的配置&#xff0c;从而实现一致性和配置管理的简化。本文将详细介绍 <parent> 标签的主要作用&#xff0c;并通过示例来说明其使用方式和关键点。 <pa…