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、掌握顺序串的基本操作方法(插入、删除等)。 3、掌握串的链式存储结构。 4、掌握链式串的几种基本操作(插入、删除等)。 5、掌握Brute-Force算法 二、实验内容 1、编写函数BFIndex(Str…...
机器学习实验三:决策树-隐形眼镜分类(判断视力程度)
决策树-隐形眼镜分类(判断视力程度) Title : 使用决策树预测隐形眼镜类型 # Description :隐形眼镜数据是非常著名的数据集 ,它包含很多患者眼部状况的观察条件以及医生推荐的隐形眼镜类型 。 # 隐形眼镜类型包括硬材质 、软材质以及不适合佩…...
广州华锐互动:VR技术应用到工程项目施工安全培训的好处
随着科技的飞速发展,虚拟现实(VR)技术已经深入到各个领域。在建筑施工领域,VR技术的应用为工程项目施工安全培训带来了许多好处。本文将探讨VR技术在这方面的优势和应用。 首先,VR技术能够提供沉浸式的安全培训体验。通过VR设备,学…...
Hadoop3.0大数据处理学习1(Haddop介绍、部署、Hive部署)
Hadoop3.0快速入门 学习步骤: 三大组件的基本理论和实际操作Hadoop3的使用,实际开发流程结合具体问题,提供排查思路 开发技术栈: 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文件可以在线浏览,但如果想要给文件添加“打开密码”,就需要用到软件工具,下面小编分享两种常用的工具,小伙伴们可以根据需要选择。 工具一:PDF编辑器 PDF阅读器一般是没有设置密码的功能模块,PDF编辑器…...
单源最短路径 -- Dijkstra
Dijkstra算法就适用于解决带权重的有向图上的单源最短路径问题 -- 同时算法要求图中所有边的权重非负(这个很重要) 针对一个带权有向图G , 将所有节点分为两组S和Q , S是已经确定的最短路径的节点集合,在初始时为空&…...
Java--多态及抽象类与接口
1.多态 以不同参数调用父类方法,可以得到不同的处理,子类中无需定义相同功能的方法,避免了重复代码编写,只需要实例化一个继承父类的子类对象,即可调用相应的方法,而只需要维护附父类方法即可。 package c…...
Python手搓C4.5决策树+Azure Adult数据集分析
前言 课上的实验 由于不想被抄袭,所以暂时不放完整代码 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 解决方案: 1、npm set strict-ssl false 2、设置代理 npm config set proxy http://xxx:xxxopenproxy.ali.com:8080npm如何在安装的时候指定源 npm install -g yarn1.…...
机器学习之查准率、查全率与F1
文章目录 查准率(Precision):查全率(Recall):F1分数(F1 Score):实例P-R曲线F1度量python实现 查准率(Precision): 定义: …...
*Django中的Ajax 纯js的书写样式1
搭建项目 建立一个Djano项目,建立一个app,建立路径,视图函数大多为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奇舞团前端开发工程师 文章标题:谈谈node架构中的线程进程的应用场景、事件循环及任务队列 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,nodejs是单线程执行的,它基于事件驱动和非阻塞I/O模型进行多任务的执行。在理…...
http代理IP它有哪些应用场景?如何提升访问速度?
随着互联网的快速发展,越来越多的人开始关注网络速度和安全性。其中,代理IP技术作为一种有效的网络加速和安全解决方案,越来越受到人们的关注。那么,http代理IP有哪些应用场景?又如何提升访问速度呢? 一、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/窗体程序,人脸识别系统,人脸追踪,计算机视觉
源码下载地址 支持:远程部署/安装/调试、讲解、二次开发/修改/定制 源码下载地址...
设计模式(16)迭代器模式
一、介绍: 1、定义:迭代器模式 (Iterator Pattern) 是一种行为型设计模式,它提供一种顺序访问聚合对象(如列表、集合等)中的元素,而无需暴露聚合对象的内部表示。迭代器模式将遍历逻辑封装在一个迭代器对象…...
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种设计模式】里氏替换原则
个人主页:金鳞踏雨 个人简介:大家好,我是金鳞,一个初出茅庐的Java小白 目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客&am…...
SQL Server服务启动失败?手把手教你用Local System账户解决SQLEXPRESS报错126
SQL Server服务启动失败?手把手教你用Local System账户解决SQLEXPRESS报错126 当你正准备开始一天的工作,突然发现SQL Server服务无法启动,屏幕上赫然显示着错误代码126,这种突如其来的技术故障往往让人措手不及。作为数据库管理员…...
【Agents】自定义子代理进阶:后台执行
基础篇:【Agents】Claude Code 多 Agent 入门:从一问一答到并行协作实践篇1:【Agents】Claude Code 自定义子代理:内置的不够用,就自己造实践篇2:【Agents】自定义子代理进阶:沙盒隔离 上一篇用 isolation: worktre…...
终极Windows驱动管家:DriverStore Explorer释放系统空间完全指南
终极Windows驱动管家:DriverStore Explorer释放系统空间完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 引言:被遗忘的驱动仓库 你是否曾疑惑为…...
Wan2.2-I2V-A14B多模态延伸:结合ASR语音识别生成带字幕视频方案
Wan2.2-I2V-A14B多模态延伸:结合ASR语音识别生成带字幕视频方案 1. 方案概述 在当今视频内容创作领域,为视频添加专业字幕一直是个耗时费力的工作。传统流程需要先录制视频,再通过人工听写或专业软件添加字幕,整个过程可能需要花…...
EcomGPT-中英文-7B电商模型实战:基于YOLOv8的商品图像识别与文案生成联动
EcomGPT-中英文-7B电商模型实战:基于YOLOv8的商品图像识别与文案生成联动 1. 引言 想象一下这个场景:你正在看一场电商直播,主播语速飞快地介绍着几十款商品。你刚对其中一款水杯产生兴趣,还没来得及问材质和容量,画…...
数字创世神:用漏洞规律操控现实
在古老的神话中,数字“一”象征着万物的起源与开端,是混沌初开、宇宙诞生的起点。伏羲一画开天,划分乾坤,自此有了天地与秩序。这种从无到有、从一到多的创世过程,与当今数字世界的构建有着惊人的同构性。在由代码构筑…...
千问3.5-27B多模态入门:图片理解支持mask区域聚焦,如‘只分析左上角区域’
千问3.5-27B多模态入门:图片理解支持mask区域聚焦,如‘只分析左上角区域’ 你是不是遇到过这种情况:给AI看一张复杂的图片,比如一张满是商品的货架,你只想让它分析左上角那个红色包装的零食,但它却把整张图…...
免费开源AI绘画工具推荐:Z-Image-Turbo,照片级质量,消费级显卡友好
免费开源AI绘画工具推荐:Z-Image-Turbo,照片级质量,消费级显卡友好 1. 为什么选择Z-Image-Turbo 在众多开源AI绘画工具中,Z-Image-Turbo以其独特的优势脱颖而出。作为阿里巴巴通义实验室开源的高效文生图模型,它完美…...
海洋载具水动力学与运动控制:从数学建模到工程实现的技术拆解
海洋载具水动力学与运动控制:从数学建模到工程实现的技术拆解 【免费下载链接】FossenHandbook Handbook of Marine Craft Hydrodynamics and Motion Control is an extensive study of the latest research in marine craft hydrodynamics, guidance, navigation, …...
手把手教你用JavaScript实现国密SM4加密(附Node.js与微信小程序兼容代码)
从零构建JavaScript国密SM4加密引擎:跨平台实战指南 国密SM4算法作为我国商用密码体系的核心标准,正在金融、政务等领域加速替代国际加密算法。但对于JavaScript开发者而言,直接可用的SM4实现往往面临三大痛点:Node.js与微信小程序…...
