[数据结构-严蔚敏版]P71串的抽象数据类型的定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码如下:

#include <iostream>
#include <string>
using namespace std;typedef struct
{char *ch;int length;
}String;bool initString(String &s)
{s.ch = nullptr;s.length = 0;return true;
}bool strAssign(String &s, const char *ch)
{int len = strlen(ch);s.ch = new char[len + 1];if (!s.ch) return false;for (int i = 0; i < len; i++){s.ch[i] = ch[i];}s.ch[len] = '\0';s.length = len;return true;
}bool strCopy(String &s, String t)
{if (!t.ch) return false;if (s.ch) delete[] s.ch;int len = strlen(t.ch);s.ch = new char[len + 1];for (int i = 0; i < len; i++){s.ch[i] = t.ch[i];}s.ch[len] = '\0';s.length = len;return true;
}bool strEmpty(String s)
{if (s.ch && s.length == 0) return true;return false;
}bool strCompare(String s, String ss)
{if (!s.ch) return false;if (!ss.ch) return false;for (int i = 0; i < s.length && i < ss.length; i++){if (s.ch[i] != ss.ch[i]){return s.ch[i] - ss.ch[i];}}return s.length - ss.length;
}int strLength(String s)
{return s.length;
}bool clearString(String &s)
{s.length = 0;return true;
}bool concatString(String &s, String s1, String s2)
{if (s.ch) delete[] s.ch;int len1 = s1.length;int len2 = s2.length;int len3 = len1 + len2;s.ch = new char[len3 + 1];for (int i = 0; i < len1; i++){s.ch[i] = s1.ch[i];}for (int i = len1; i < len3; i++){s.ch[i] = s2.ch[i];}s.ch[len3] = '\0';s.length = len3;return true;
}bool subString(String &sub, String s, int pos, int len)
{if (!s.ch) return false;if (pos <1 || pos > s.length || len < 0 || len > s.length - pos + 1) return false;if (sub.ch) delete[] sub.ch;if (!len){sub.ch = nullptr;sub.length = 0;}else{sub.ch = new char[len + 1];for (int i = 0; i < len; i++){sub.ch[i] = s.ch[pos - 1 + i];}sub.ch[len] = '\0';sub.length = len;}return true;
}int indexString(String s, String ss, int pos)
{if (pos > 0){int n = s.length;int m = ss.length;int i = pos;String sub;initString(sub);while (i <= n - m + 1){subString(sub, s, i, m);if (strCompare(sub, ss) != 0) ++i;else return i;}}return false;
}bool strInsert(String &s, int pos, String t)
{if (t.ch && s.ch){int len1 = t.length;int len2 = s.length;int len3 = len1 + len2;char *p = new char[len3 + 1];if (!p) return false;for (int i = 0; i < pos - 1 && i < len3; i++){p[i] = s.ch[i];}for (int i = 0; i < len1 && pos - 1 + i; i++){p[pos - 1 + i] = t.ch[i];}for (int i = 0; i < len3 - pos + 1 && pos + len1 - 1 + i < len3; i++)//pos + len1 - 1 + i < len3,防止数组越界,导致无法成功释放内存(数组越界以后,delete无法成功释放内存){p[pos + len1 - 1 + i] = s.ch[pos - 1 + i];}p[len3] = '\0';delete[] s.ch;s.ch = nullptr;s.ch = p;s.length = len3;return true;}return false;
}bool strDelete(String &s, int pos, int len)
{if (pos >= s.length) return false;if (pos + len >= s.length){s.length = len;s.ch[len] = '\0';}else{int start = pos + len - 1;while (start <= s.length){s.ch[pos - 1] = s.ch[start];++start;++pos;}s.length -= len;}return  true;
}bool replaceString(String &s, String t, String v)
{int len_s = s.length;int len_t = t.length;int len_v = v.length;int j = 1;String sub;initString(sub);while (len_s - j + 1 >= len_t){subString(sub, s, j, len_t);if (strCompare(sub, t) == 0){strDelete(s, j, len_t);strInsert(s, j, v);j += len_v;s.length = s.length + len_v - len_t;len_s = s.length;}else{j++;}}return true;
}bool destroyString(String &s)
{if (s.ch){delete[]s.ch;s.length = 0;}return true;
}int main()
{const char *ch = "dasfas";String s1;const char *ch1 = "dadas";String s2;const char *ch2 = "as";String s3;strAssign(s3, ch2);strAssign(s2, ch1);strAssign(s1, ch);strInsert(s1, 4, s2);strDelete(s1, 4, 5);cout << s1.ch << endl;cout << s2.ch << endl;replaceString(s1, s3, s2);cout << s1.ch << endl;String s4;initString(s4);strCopy(s4, s1);cout << s4.ch << endl;return 0;
}

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

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

相关文章

三分钟学会.NET Core Jwt 策略授权认证

一.前言大家好我又回来了&#xff0c;前几天讲过一个关于Jwt的身份验证最简单的案例&#xff0c;但是功能还是不够强大&#xff0c;不适用于真正的项目&#xff0c;是的&#xff0c;在真正面对复杂而又苛刻的客户中&#xff0c;我们会不知所措&#xff0c;就现在需要将认证授权…

[数据结构-严蔚敏版]P65离散事件模拟(银行客户的离散事件驱动模拟程序)

写这个简单玩意&#xff0c;居然花费了我6小时&#xff0c;唉!!!&#xff0c;还是太菜了! 中间已经起了放弃的念头了&#xff0c;最后还是坚持下来了! 总结&#xff1a; (1)漏了p p->next (2)队列删除元素的时候&#xff0c;删除的是最后一个忘记特判。 (3)写的时候太急了…

[温故知新] 编程原则和模式

写了这么多年代码&#xff0c;依旧做不好一个项目做好一个项目是人力、产品、业务、技术、运营的结合&#xff0c;可能还叠加一点时机的因素&#xff0c;就我们码农而言&#xff0c;工作就是搬砖&#xff0c;实现产品&#xff0c; 给业务提供支撑。“给祖传代码加 BUG 修 BUG”…

IntelliJ IDEA中快捷键大全+出现的问题

参照 文章目录1.Ctrl2.Alt3.Shift4.Ctrl Alt5.Ctrl Shift6.Alt Shift7.Ctrl Shift Alt8.其他idea如何将设置包名展开当出现右键&#xff0c;没有创建包选项时idea没有maven图标安装mysql和idea配置idea查看代码的最近修改人及时间1.Ctrl 快捷键介绍Ctrl F在当前文件进行…

基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八)

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

[数据结构-严蔚敏版]P95矩阵压缩-特殊矩阵的存储(对称矩阵,三角矩阵)

对称矩阵的存储&#xff1a; 代码如下: #include <iostream> using namespace std;int main() {int n;cin >> n;int *a;a new int[(n*(n 1)) / 2];for (int i 0; i < (n*(n 1)) / 2; i){cin >> a[i];}for (int i 1; i < n; i){for (int j 1; j…

微前端与项目实施方案研究

一、前言微前端(micro-frontends)是近几年在前端领域出现的一个新概念&#xff0c;主要内容是将前端应用分解成一些更小、更简单的能够独立开发、测试、部署的小块&#xff0c;而在用户看来仍然是内聚的单个产品。微前端的理念源于微服务&#xff0c;是将庞大的整体拆成可控的小…

ASP.NET Core分布式项目实战(集成ASP.NETCore Identity)--学习笔记

任务24&#xff1a;集成ASP.NETCore Identity之前在 Index 页面写了一个 strong 标签&#xff0c;需要加个判断再显示&#xff0c;不然为空没有错误的时候也会显示if (!ViewContext.ModelState.IsValid) {<strong>Error""</strong><div asp-validatio…

Java中关于省略作用域报错问题分析

这个是很典型的作用域问题&#xff0c;if后如果省略那么if只作用于其后面的第一行代码 这时候如果这行代码只是个变量声明语句的话&#xff0c;这个变量是没有其他任何逻辑可以访问到的&#xff0c;因为作用域问题(如果有/&#xff0c;那么声明语句中声明的变量只在这个个内可用…

C#9就这么来了,.NET开发者该做点什么?

就在上周三10号&#xff0c;.NET5.0发布了第5个预览版&#xff0c;同时支持了C#9-preview&#xff01;是的&#xff0c;你没看错&#xff0c;虽然C# 8.0还未正式发布&#xff0c;但是通往C&#xff03;9的漫长道路却已经开始&#xff0c;这发展速度简直了&#xff01;C#语言的快…

Magicodes.IE在.NET Core中通过请求头导出多种格式文件

原文作者&#xff1a;HueiFeng前言在2.2里程碑中我们增加了一些新的功能,正如标题所写通过请求头进行导出我们不同格式的文件.下面我们来看一下如何使用.通过这种方式无论是对我们的数据多用途&#xff0c;还是说对我们的数据校验都做到了轻松易配。同时我们也将在本周发布2.3版…

使用DQL查询数据

文章目录DQL语言SELECT语法制定查询字段AS 子句作为别名DISTINCT关键字的使用使用表达式的列where条件语句逻辑操作符模糊查询 &#xff1a; 比较操作符连接查询JION自连接排序和分页子查询DQL语言 DQL( Data Query Language 数据查询语言 ) 查询数据库数据 , 如SELECT语句简…

基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九)

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

SilkierQuartz 1.0.21 发布, 是一个 Quartz.NET 的强大且简单的Web管理工具和承载组件...

SilkierQuartz 是一个新的合并了 Quartzmin 和 QuartzHostedService的组件!Quartz.NET 是一个完整的开源的任务规划系统&#xff0c;从小应用至大型企业级应用都可以适用.Quartzmin Quartzmin 是一个 Quartz.NET 的强大且简单的Web管理工具QuartzHostedService QuartzHostedSer…

用C#在STM32上写第一个Hello world

随着微软放弃.Net MF ,通过C#编写STM32 平台上的程序变得渺茫&#xff0c; 但是&#xff0c; 别着急&#xff0c; 目前至少有两个社区在做这件事情&#xff0c; 传承了微软的.Net MF , 一家是 nanoframework,另外一家比较封闭的是 GHI Electronics 地址是: https://github.com/…

如何找到Eclipse左侧项目栏

如何找到Eclipse左侧项目栏 window --> Show View --> other --> Java–> package Explorer

深入async/await知多少

.net的async/await功能相信对很多人来说并不陌生了&#xff0c;有人感觉这功能很好&#xff0c;但也有人说这功能不好容易产生一些莫名其妙的死锁&#xff1b;有人说这些异步功能也有人说这是同步功能。其实在使用async/await的有多少人真的了解它们呢&#xff1f;接下来详细地…

微软正式发布 gRPC-Web for .NET

今年一月份的时候&#xff0c;微软曾宣布对 gRPC-Web for .NET 的实验性支持微软实验性地对 .NET 支持 gRPC-Web&#xff0c;现在它已正式发布。gRPC 是谷歌开源的高性能、通用 RPC 框架&#xff0c;支持包括 .NET 在内的多种编程语言。它面向移动和基于 HTTP/2 标准设计&#…

Java多线程(review)

文章目录线程状态线程方法线程停止线程休眠——sleep网络延时模拟倒计时与打印当前系统时间线程礼让——yield线程强制执行——Join线程状态线程优先级守护线程不安全案例死锁Lock锁线程状态 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后&#xff0c;该线…

利用Azure Functions和k8s构建Serverless计算平台

题记&#xff1a;昨晚在一个技术社区直播分享了“利用Azure Functions和k8s构建Serverless计算平台”这一话题。整个分享分为4个部分&#xff1a;Serverless概念的介绍、Azure Functions的简单介绍、k8s和KEDA的介绍和最后的演示。ServerlessServerless其实包含了两种概念&…