当前位置: 首页 > news >正文

GDPU 数据结构 天码行空6

一、实验目的

1、掌握串的顺序存储结构
2、掌握顺序串的基本操作方法(插入、删除等)。
3、掌握串的链式存储结构。
4、掌握链式串的几种基本操作(插入、删除等)。
5、掌握Brute-Force算法

二、实验内容

1、编写函数BFIndex(String S, int start, String T),实现Brute-Force算法,其中S为主串,start为子串在主串中的查找位置,T为子串。程序可参考书本例子。(鼓励使用KMP算法)。

2、设串采用静态数组存储结构,编写函数实现串的替换Replace(S,start,T,V),即要求在主串S中,从位置start开始查找是否存在子串T。若主串S中存在子串T,则用子串V替换子串T,且函数返回1;若主串S中不存在子串T,则函数返回0。并要求设计主函数进行测试。

三、参考代码

🌸 SString.h

#include <stdio.h>
#define MaxSize 100
typedef struct
{char str[MaxSize];int length;
} String;
int Insert(String *S, int pos, String T)
/*在串S的pos位置插入子串T*/
{int i;if(pos < 0){printf("参数pos出错!");return 0;}else if(S->length + T.length > MaxSize){printf("数组空间不足无法插入!");return 0;}else{for(i = S->length-1; i >= pos; i--)S->str[i+T.length] = S->str[i];		/*为插入做准备*/for(i = 0; i < T.length; i++)S->str[pos+i] = T.str[i];				/*插入*/S->length += T.length;						/*产生新的元素个数*/return 1;}
}int Delete(String *S, int pos, int len)
{int i;if(S->length <= 0){printf("数组中未存放字符无元素可删! \n");return 0;}else if(pos < 0 || len < 0 || pos+len > S->length){printf("参数pos和len出错");return 0;}else{for(i = pos+len; i <= S->length-1; i++)S->str[i-len] = S->str[i];				/*依次前移*/S->length -= len;						/*产生新的长度值*/return 1;}
}

🌸 主程序

#include <bits/stdc++.h>
#include "SString.h"
#define Maxlength 100using namespace std;// s 为主串,start为开始的下标,t为要查找的子串
// 成功匹配则返回第一个出现在主串的子串 的 首字符下标,匹配失败返回 -1
int kmp(String s,int start,String t)
{
//	TODO 自己完成int res = -1;
//	预处理next数组int next[t.length];next[0] = 0;for(int i = 1,j = 0; i < t.length; i++){while(j > 0 && t.str[i] != t.str[j])//不匹配的情况,往回跳j = next[j-1];if(t.str[i] == t.str[j])//匹配的情况,j++j++;next[i] = j;//打表}//	kmp匹配过程for(int i = 0, j = 0; i < s.length; i++){while(j > 0 && s.str[i] != t.str[j])j = next[j-1];if(s.str[i] == t.str[j] )j++;if(j == t.length)//匹配成功{res = i - j +1;break;}	}return res;
}// S 为主串,start为开始的下标,T为要查找的子串
// 成功匹配则返回第一个出现在主串的子串 的 首字符下标,匹配失败返回 -1
int BFIndex(String S, int start, String T) {
//	TODO 自己完成int res = -1;//-1 表示没找到for(int i = 0;i < S.length; i++){bool flag = true;int k = i;for(int j = 0; j < T.length; j++){if(S.str[k++] != T.str[j]){flag = false;break;}}if(flag){res = i;break;}}return res;
}//原串:s 开始下标:start,目标串:t,替换串:v
int Replace(String *S, int start, String T, String V)
{
//	TODO 自己完成int idx = kmp(*S,0,T);if(idx == -1)//没找到return 0;
//	找到了,替换Delete(S,idx,T.length);Insert(S,idx,V);return 1;
}//原串:s 开始下标:start,目标串:t,替换串:v
int myReplace(String *s, int start, String t, String v)
{
//	TODO 自己完成int idx = kmp(*s,0,t);if(idx == -1)//没找到return 0;
//	找到了,替换int len = s->length;int tlen = t.length;//原本的长度 - 替换串的长度int d = t.length-v.length;//d>0 后面的串左移 d 位if(d > 0)//后串左移for(int i = idx + tlen; i < len; i++)s->str[i-d] = s->str[i];else if(d < 0)//后串右移for(int i = len-1; i >= len - idx + tlen -1; i--)s->str[i-d] = s->str[i];s->length -= d;//	将替换串放入主串中for(int i = idx, j =0; i < idx+v.length; i++)s->str[i] = v.str[j++];return 1;
}int main(void) {String myString1, myString2, myString3;int i, start = 0;printf("请输入主串myString1: ");scanf("%s", myString1.str );printf("请输入子串myString2: ");scanf("%s", myString2.str);printf("请输入子串myString3: ");scanf("%s", myString3.str);myString1.length = strlen(myString1.str);myString2.length = strlen(myString2.str);myString3.length = strlen(myString3.str);
//	int res = BFIndex(myString1,0,myString2);
//	int res1 = kmp(myString1,0,myString2);
//	cout << res << " " << res1;if (Replace(&myString1, start, myString2, myString3) == 0)printf("不成功 ");elsefor (i = 0; i < myString1.length ; i++)printf("%c", myString1.str[i]);
}

相关文章:

GDPU 数据结构 天码行空6

一、实验目的 1、掌握串的顺序存储结构 2、掌握顺序串的基本操作方法&#xff08;插入、删除等&#xff09;。 3、掌握串的链式存储结构。 4、掌握链式串的几种基本操作&#xff08;插入、删除等&#xff09;。 5、掌握Brute-Force算法 二、实验内容 1、编写函数BFIndex(Str…...

机器学习实验三:决策树-隐形眼镜分类(判断视力程度)

决策树-隐形眼镜分类&#xff08;判断视力程度&#xff09; Title : 使用决策树预测隐形眼镜类型 # Description :隐形眼镜数据是非常著名的数据集 &#xff0c;它包含很多患者眼部状况的观察条件以及医生推荐的隐形眼镜类型 。 # 隐形眼镜类型包括硬材质 、软材质以及不适合佩…...

广州华锐互动:VR技术应用到工程项目施工安全培训的好处

随着科技的飞速发展&#xff0c;虚拟现实(VR)技术已经深入到各个领域。在建筑施工领域&#xff0c;VR技术的应用为工程项目施工安全培训带来了许多好处。本文将探讨VR技术在这方面的优势和应用。 首先&#xff0c;VR技术能够提供沉浸式的安全培训体验。通过VR设备&#xff0c;学…...

Hadoop3.0大数据处理学习1(Haddop介绍、部署、Hive部署)

Hadoop3.0快速入门 学习步骤&#xff1a; 三大组件的基本理论和实际操作Hadoop3的使用&#xff0c;实际开发流程结合具体问题&#xff0c;提供排查思路 开发技术栈&#xff1a; Linux基础操作、Sehll脚本基础JavaSE、Idea操作MySQL Hadoop简介 Hadoop是一个适合海量数据存…...

C笔记:引用调用,通过指针传递

代码 #include<stdio.h> int max1(int num1,int num2) {if(num1 < num2){num1 num2;}else{num2 num1;} } int max2(int *num1,int *num2) {if(num1 < num2){*num1 *num2; // 把 num2 赋值给 num1 }else{*num2 *num1;} } int main() {int num1 0,num2 -2;int…...

【方法】如何给PDF文件添加“打开密码”?

PDF文件可以在线浏览&#xff0c;但如果想要给文件添加“打开密码”&#xff0c;就需要用到软件工具&#xff0c;下面小编分享两种常用的工具&#xff0c;小伙伴们可以根据需要选择。 工具一&#xff1a;PDF编辑器 PDF阅读器一般是没有设置密码的功能模块&#xff0c;PDF编辑器…...

单源最短路径 -- Dijkstra

Dijkstra算法就适用于解决带权重的有向图上的单源最短路径问题 -- 同时算法要求图中所有边的权重非负&#xff08;这个很重要&#xff09; 针对一个带权有向图G &#xff0c; 将所有节点分为两组S和Q &#xff0c; S是已经确定的最短路径的节点集合&#xff0c;在初始时为空&…...

Java--多态及抽象类与接口

1.多态 以不同参数调用父类方法&#xff0c;可以得到不同的处理&#xff0c;子类中无需定义相同功能的方法&#xff0c;避免了重复代码编写&#xff0c;只需要实例化一个继承父类的子类对象&#xff0c;即可调用相应的方法&#xff0c;而只需要维护附父类方法即可。 package c…...

Python手搓C4.5决策树+Azure Adult数据集分析

前言 课上的实验 由于不想被抄袭&#xff0c;所以暂时不放完整代码 Adult数据集可以在Azure官网上找到 Azure 开放数据集中的数据集 - Azure Open Datasets | Microsoft Learn 数据集预处理 删除难以处理的权重属性fnlwgt与意义重复属性educationNum去除重复行与空行删除…...

【tg】6: MediaManager的主要功能

【tg】2:视频采集的输入和输出 的管理者是 media manager‘ media 需要 network的支持:NetworkInterface friend class MediaManager::NetworkInterfaceImpl;NetworkInterfaceImpl 直接持有 MediaManager 的指针即可:发送rtp包、rtcp包、设置socket选项?...

NPM-安装报错connect ETIMEDOUT

报错信息request to https://registry.npm.taobao.org/yarn failed, reason: connect ETIMEDOUT 解决方案&#xff1a; 1、npm set strict-ssl false 2、设置代理 npm config set proxy http://xxx:xxxopenproxy.ali.com:8080npm如何在安装的时候指定源 npm install -g yarn1.…...

机器学习之查准率、查全率与F1

文章目录 查准率&#xff08;Precision&#xff09;&#xff1a;查全率&#xff08;Recall&#xff09;&#xff1a;F1分数&#xff08;F1 Score&#xff09;&#xff1a;实例P-R曲线F1度量python实现 查准率&#xff08;Precision&#xff09;&#xff1a; 定义&#xff1a; …...

*Django中的Ajax 纯js的书写样式1

搭建项目 建立一个Djano项目&#xff0c;建立一个app&#xff0c;建立路径&#xff0c;视图函数大多为render, Ajax的创建 urls.py path(index/,views.index), path(index2/,views.index2), views.py def index(request):return render(request,01.html) def index2(requ…...

谈谈node架构中的线程进程的应用场景、事件循环及任务队列

本文作者系360奇舞团前端开发工程师 文章标题&#xff1a;谈谈node架构中的线程进程的应用场景、事件循环及任务队列 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;nodejs是单线程执行的&#xff0c;它基于事件驱动和非阻塞I/O模型进行多任务的执行。在理…...

http代理IP它有哪些应用场景?如何提升访问速度?

随着互联网的快速发展&#xff0c;越来越多的人开始关注网络速度和安全性。其中&#xff0c;代理IP技术作为一种有效的网络加速和安全解决方案&#xff0c;越来越受到人们的关注。那么&#xff0c;http代理IP有哪些应用场景&#xff1f;又如何提升访问速度呢&#xff1f; 一、h…...

Armv8/Armv9的VIPT的别名问题是如何解决的

https://www.cse.unsw.edu.au/~cs9242/02/lectures/03-cache/node8.html https://developer.arm.com/documentation/ddi0406/b/System-Level-Architecture/Virtual-Memory-System-Architecture–VMSA-/Address-mapping-restrictions...

java/javaswing/窗体程序,人脸识别系统,人脸追踪,计算机视觉

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 源码下载地址...

设计模式(16)迭代器模式

一、介绍&#xff1a; 1、定义&#xff1a;迭代器模式 (Iterator Pattern) 是一种行为型设计模式&#xff0c;它提供一种顺序访问聚合对象&#xff08;如列表、集合等&#xff09;中的元素&#xff0c;而无需暴露聚合对象的内部表示。迭代器模式将遍历逻辑封装在一个迭代器对象…...

Openssl数据安全传输平台011:秘钥协商服务端

0. 代码仓库 https://github.com/Chufeng-Jiang/OpenSSL_Secure_Data_Transmission_Platform/tree/main/Preparation 编译protobuf类文件 VS2022 protobuf3.17 Message.proto protoc Message.proto --cpp_out./...

【23种设计模式】里氏替换原则

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…...

终极免费离线OCR解决方案:Umi-OCR完整使用指南

终极免费离线OCR解决方案&#xff1a;Umi-OCR完整使用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语言库。 …...

Zotero插件市场:三步快速上手的插件管理神器

Zotero插件市场&#xff1a;三步快速上手的插件管理神器 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons 想象一下&a…...

框架式幕墙与单元式幕墙的价格差异

框架式幕墙与单元式幕墙的价格差异 框架式幕墙与单元式幕墙由于结构及安装方式的不同,在价格方面存着很大的差异。主要表现在以下几个方面: 铝型材的用量: 框架式幕墙铝型材用量一般在7—9 kg/平方米左右。 单元式幕墙铝型材用量一般在13—15kg/平方米左右。 两者每平方…...

技术视角:Sketchfab数据提取工具深度解析3D模型下载机制

技术视角&#xff1a;Sketchfab数据提取工具深度解析3D模型下载机制 【免费下载链接】sketchfab sketchfab download userscipt for Tampermonkey by firefox only 项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab 在WebGL技术日益成熟的今天&#xff0c;Sketch…...

3分钟掌握Seraphine:英雄联盟智能助手完全指南

3分钟掌握Seraphine&#xff1a;英雄联盟智能助手完全指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine Seraphine是一款基于英雄联盟官方LCU API开发的智能游戏助手&#xff0c;通过自动BP系统和实时战绩查…...

Arm Neoverse CMN-700 HN-F寄存器架构与缓存一致性配置详解

1. Arm Neoverse CMN-700 HN-F寄存器架构概述在现代SoC设计中&#xff0c;一致性互连网络&#xff08;Coherent Mesh Network&#xff09;是实现多核处理器高效协同工作的核心基础设施。作为Arm Neoverse平台的关键组件&#xff0c;CMN-700通过其独特的网格拓扑结构和分布式节点…...

3个维度深度解析:UABEA如何重塑Unity资源处理生态

3个维度深度解析&#xff1a;UABEA如何重塑Unity资源处理生态 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 在Unity游戏开发和资源处理的复杂生态中&#xff0c;开发者常常面临一个核心挑战&#xf…...

VT.ai:开发者AI工具集实战指南,提升编码效率与调试体验

1. 项目概述&#xff1a;一个面向开发者的AI工具集最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“vinhnx/VT.ai”。乍一看这个标题&#xff0c;可能有点摸不着头脑&#xff0c;但点进去研究一番&#xff0c;你会发现这其实是一个开发者为自己、也为社区打造的一个AI工具…...

开源技能安全仪表盘:从架构解析到CI/CD集成的DevSecOps实践

1. 项目概述&#xff1a;一个面向技能开发者的安全仪表盘最近在折腾一些智能设备上的技能开发&#xff0c;发现一个挺普遍但容易被忽视的问题&#xff1a;我们花大量时间在功能实现和用户体验上&#xff0c;但技能本身的安全性评估&#xff0c;往往只能等到上线后&#xff0c;通…...

用STM32+LoRa+阿里云IoT Studio,我DIY了一个低成本畜牧电子围栏(附完整代码)

基于STM32与LoRa的智能畜牧围栏系统开发实战 在广袤的牧区&#xff0c;牲畜走失一直是困扰牧民的核心问题。传统物理围栏不仅成本高昂&#xff0c;在草原这类开放地形中实施难度也很大。本文将详细介绍如何利用STM32微控制器、LoRa远距离通信模块和阿里云IoT Studio平台&#x…...