数据结构与算法——字符串暴力匹配

news2025/6/29 13:52:44

一、字符串的组成

        1.数据域,字符串的内容

        2.字符串的长度

二、模式匹配-暴力匹配原理

        1.两个字符串一个主串一个模式串用两个指针对其进行匹配

         2、两个指针所对应的值相同时继续匹配下一个

        

         3、当出现不匹配的情况时,回溯主串的指针到刚开始起点的下一个位置,模式串回到最初的位置。

         4、当主串超出索引时结束匹配,判断模式串是否在最后一个位置来检查是否完成匹配。

三、暴力匹配算法代码实现

        1.初始化字符串

String* InitString(void)
{
	String* S = (String*)malloc(sizeof(String));
	S->data = NULL;
	S->length = 0;
	return S;
}

         2.向字符串中增加元素

void stringAssign(String* s, char* data)
{
	if (s->data)
	{
		free(s->data);
	}
	int len = 0;
	char* temp = data;
	while (*temp)
	{
		temp++;
		len++;
	}
	if (len == 0)
	{
		s->data = NULL;
		s->length = 0;

	}
	else {
		temp = data;
		s->length = len;
		s->data = (char*)malloc(sizeof(char) * (len + 1));
		for (int i = 0; i < len; i++,temp++)
		{
			s->data[i] = *temp;
		}
	}
}

        3.打印字符串

void PrintString(String* s)
{
	for (int i = 0; i < s->length; i++)
	{
		printf(i == 0 ? "%c" : "->%c", s->data[i]);
	}
	printf("\n");
}

        4.暴力匹配算法代码实现

void Forcemach(String* master, String* sub)
{
	int i = 0, j = 0;
	while (i < master->length && j < sub->length)
	{
		if (master->data[i] == sub->data[j])
		{
			i++; j++;
		}
		else {
			i = i - j + 1;
			j = 0;
		}
	}
	if (j == sub->length)
	{
		printf("success");
	}
	else printf("fail");
}

        5.完整工程代码

#include<stdio.h>
#include<stdlib.h>
typedef struct String
{
	char* data;
	int length;
}String;

String* InitString(void)
{
	String* S = (String*)malloc(sizeof(String));
	S->data = NULL;
	S->length = 0;
	return S;
}
void stringAssign(String* s, char* data)
{
	if (s->data)
	{
		free(s->data);
	}
	int len = 0;
	char* temp = data;
	while (*temp)
	{
		temp++;
		len++;
	}
	if (len == 0)
	{
		s->data = NULL;
		s->length = 0;

	}
	else {
		temp = data;
		s->length = len;
		s->data = (char*)malloc(sizeof(char) * (len + 1));
		for (int i = 0; i < len; i++,temp++)
		{
			s->data[i] = *temp;
		}
	}
}
void PrintString(String* s)
{
	for (int i = 0; i < s->length; i++)
	{
		printf(i == 0 ? "%c" : "->%c", s->data[i]);
	}
	printf("\n");
}
void Forcemach(String* master, String* sub)
{
	int i = 0, j = 0;
	while (i < master->length && j < sub->length)
	{
		if (master->data[i] == sub->data[j])
		{
			i++; j++;
		}
		else {
			i = i - j + 1;
			j = 0;
		}
	}
	if (j == sub->length)
	{
		printf("success");
	}
	else printf("fail");
}
int main()
{
	String* string1= InitString();
	String* string2 = InitString();
	stringAssign(string1,"Hello world!");
	stringAssign(string2, "Hello world!");
	Forcemach(string1, string2);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1583856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP地址定位技术在各领域的作用

IP地址定位是通过确定IP地址的物理位置来定位一个设备的技术&#xff0c;它在现代社会的多个领域中都有着广泛的应用。以下将详细探讨IP地址定位的应用场景&#xff0c;以期对读者有所启发。 首先&#xff0c;在网络安全领域&#xff0c;IP地址定位发挥着至关重要的作用。网络…

业务逻辑漏洞(靶场) fiddler

目录 fiddler简介&#xff1a; 业务逻辑漏洞&#xff1a; fiddler下载 靶场&#xff1a; 实验一 ​编辑实验二&#xff08;ps 更改实验url会变&#xff0c;fiddler没抓到东西看看代理改没改&#xff09; 实验三 实验四 fiddler简介&#xff1a; 一款网络抓包工具&#…

如何丝滑地切换node版本

背景 由于有些比较老的系统&#xff0c;使用的node版本较低&#xff0c;本机装的node版本又比较高&#xff0c;不想降node版本&#xff0c;那么就需要考虑能不能在系统里管理多个node版本呢&#xff1f;由于我使用的操作系统是Mac&#xff0c;下面将主要讲解如何在Mac上快速切…

Tmux 使用笔记

Tmux 是一个终端复用器&#xff08;terminal multiplexer&#xff09;&#xff0c;非常有用&#xff0c;属于常用的开发工具。 本文记录个人使用 Tmux的命令。 1. tmux简介 命令行的典型使用方式是&#xff0c;打开一个终端窗口&#xff0c;连接计算机&#xff0c;在里面输入…

LeetCode-热题100:148. 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a; head [4,2,1,3] 输出&#xff1a; [1,2,3,4] 示例 2&#xff1a; 输入&#xff1a; head [-1,5,3,4,0] 输出&#xff1a; [-1,0,3,4,5] 示例…

探索未来产业:新技术、新商业、新趋势

引言 随着科技的迅速发展和全球经济的不断变化&#xff0c;未来产业已经成为全球关注的焦点之一。未来产业的兴起不仅代表着新的商业机遇&#xff0c;更是对传统产业模式的颠覆和重构。在这个充满挑战和机遇的时代&#xff0c;我们不得不认真思考未来产业的重要性和前景。 未…

现在软考考什么科目最好?

适合你的学科才是最适合你的学科。 在软考的同一级别&#xff0c;证书的价值差不多。只能说有些学科比较受欢迎&#xff0c;需求量比较大。 中级的系统集成项目管理工程师是最受欢迎的考试科目&#xff0c;其次是软件设计师和网络工程师。由于市场需求大&#xff0c;报考人数也…

gradio简单搭建——关键词匹配筛选【进一步优化】

gradio简单搭建——关键词匹配筛选[进一步优化] 任务回顾新的想法&#xff1a;无效元素筛选界面搭建数据处理与生成过程交互界面展示 任务回顾 在 apply \text{apply} apply方法的使用一节中&#xff0c;简单提到了任务目标&#xff1a;通过关键词的形式&#xff0c;在文本数据…

DNS 各记录类型说明及规则

各记录类型使用目的 记录类型使用目的A 记录将域名指向一个 IP 地址。CNAME 记录将域名指向另一个域名&#xff0c;再由另一个域名提供 IP 地址。MX 记录设置邮箱&#xff0c;让邮箱能收到邮件。NS 记录将子域名交给其他 DNS 服务商解析。AAAA 记录将域名指向一个 IPv6 地址。…

VMware vSphere虚拟化基础管理平台

VMware简介 VMware介绍 官网&#xff1a;https://www.vmware.com/cn.html VMware公司成立于1998年&#xff0c;2003年存储厂商EMC以6.35亿美元收购了VMware&#xff1b;2015年10月&#xff0c;戴尔宣布以670亿美元收购EMC。VMware公司在2018年全年收入79.2亿美元。 VMware主…

20240326-1-KNN面试题

KNN面试题 1.简述一下KNN算法的原理 KNN算法利用训练数据集对特征向量空间进行划分。KNN算法的核心思想是在一个含未知样本的空间&#xff0c;可以根据样本最近的k个样本的数据类型来确定未知样本的数据类型。 该算法涉及的3个主要因素是&#xff1a;k值选择&#xff0c;距离度…

AOF文件重写

1.2.3.AOF文件重写 因为是记录命令&#xff0c;AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作&#xff0c;但只有最后一次写操作才有意义。通过执行bgrewriteaof命令&#xff0c;可以让AOF文件执行重写功能&#xff0c;用最少的命令达到相同效果。 如图&am…

SolidWorks上手直接开整

本科学3D建模的时候&#xff0c;学习过犀牛Rhine&#xff0c;当时就惊叹于入籍紧密集成的可视化编程环境&#xff0c;后来又简单学习过了3DMax、Maya&#xff0c;平时使用的频率不多&#xff0c;所以还是初学者水平&#xff0c;现在课题组需要自研一个原型机&#xff0c;需要工…

图片管理系统:原理、设计与实践

title: 图片管理系统&#xff1a;原理、设计与实践 date: 2024/4/9 20:04:25 updated: 2024/4/9 20:04:25 tags: 图片管理存储组织上传采集处理编辑搜索检索展示分享AI应用 第一章&#xff1a;图片管理系统概述 1.1 图片管理系统简介 图片管理系统是一种用于存储、组织、处理…

Redux和Redux Toolkit

Redux 概念&#xff1a;redux是react最常用的集中状态管理工具&#xff0c;类似于Vue中的Pinia(vuex)&#xff0c;可以独立于框架运行作用&#xff1a;通过集中管理的方式管理应用的状态 Redux快速体验 不和任何框架绑定&#xff0c;不使用任何构建工具&#xff0c;使用纯Re…

kali linux 安装 VirtualBox for Linux Hosts

sudo vim /etc/apt/sources.list deb [archamd64] https://download.virtualbox.org/virtualbox/debian buster contrib添加源文件 sudo apt update sudo apt install linux-headers-$(uname -r) dkms sudo apt install virtualbox virtualbox-ext-pack 扩展包 echo "d…

干货分享|JumpServer三种常见的文件传输方式效果对比

JumpServer开源堡垒机支持对文件的上传和下载&#xff0c;并对传输记录进⾏审计。JumpServer的文件传输功能是用户使用频率较高的功能&#xff0c;常见的文件传输方式包括&#xff1a;rz和sz命令方式、文件管理方式和客户端工具方式。 在使用JumpServer进行文件传输的时候&…

【SpringBoot3】Bean管理

1.Bean扫描 1.1传统Spring 标签&#xff1a;<context:component-scan base-package"com. example "/>注解&#xff1a;ComponentScan(basePackages "com.example") 1.2SpringBoot SpringBoot默认扫描启动类所在的包及其子包 2.Bean注册 如果要注…

Qt 多窗体

前言 在 Qt编程中经常会遇到要在多个界面之间切换的情况&#xff0c;如从登录界面跳转到主界面&#xff0c;从主界面跳转到设置界面&#xff0c;再返回到主界面。我们将会用一个简单的示例来实现多窗体功能。 登录窗口 创建基类为QMainWindow&#xff0c;类名为LoginWin。再使用…

手机放枕边真的很危险吗

从小我的妈妈就告诉我&#xff1a;睡觉的时候手机放枕头边上&#xff0c;辐射会对身体有害&#xff0c;但事实真是这样吗&#xff1f; 首先只要是会发热的物体就都有辐射&#xff0c;但是手机的辐射是电磁辐射&#xff0c;对人无害&#xff0c;它造成的电磁辐射甚至没有太阳造…