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

用C++编写一个MyString类

 1.平台:vs2019

2.很多知识点写在了代码里

class MyString
{
private:char* str;MyString(char* p, int x){str = p;}
public:MyString(const char* p = nullptr) :str(nullptr){if (p != nullptr){int len = strlen(p) + 1;str = new char[len];strcpy_s(str, len, p);}else{str = new char[1];str[0] = '\0';//空字符串}}MyString(const MyString& s) :str(nullptr)//拷贝构造{if (s.str != nullptr){int len = strlen(s.str) + 1;str = new char[len];strcpy_s(str, len, s.str);}}MyString& operator=(const MyString& s)//赋值运算符重载有4中情况 0  0    0  1   1  0      1 1{if (this != &s){delete[]str;int len = strlen(s.str) + 1;//strlen不能计算空字符串的长度str = new char[len];strcpy_s(str, len, s.str);}return *this;}~MyString(){delete[]str;str = nullptr;}MyString operator+(const MyString& s)const//这里不能以引用返回,引用返回相当于是地址,函数调用完成之后,地址消失{int len = strlen(str) + 1 +strlen(s.str);char*ps = new char[len];strcpy_s(ps, len, str);strcat_s(ps, len, s.str);//只用放一个\0。前面加了两次1 所以这里减1return MyString(ps,1);}MyString operator+(const char* s)const{//return *this + MyString(s);//  第一种int len = strlen(this->str) + 1 + strlen(s);char* ps = new char[len];strcpy_s(ps, len, this->str);strcat_s(ps, len,s);//只用放一个\0。前面加了两次1 所以这里减1return MyString(ps, 1);}MyString& operator+=(const MyString &s){int len = strlen(this->str) + 1 + strlen(s.str);char* tmp = this->str;this->str = new char[len];strcpy_s(str, len, tmp);strcat_s(str, len, s.str);//只用放一个\0。前面加了两次1 所以这里减1delete[]tmp;return *this; //掉一个私有的构造函数,这个函数只是自己用}char* Get(){return str;}const char* Get()const{return str;}void Print(){cout << "str    " << str << endl;}size_t Size()const { return strlen(str); }char &operator[](const int pos)//普通方法 这里不能直接在后面加const的原因是前面以引用返回,我们可以修改它的值,这里加了const就不允许修改值了{assert(pos >= 0 && pos < Size());return str[pos];}const char& operator[](const int pos)const//常方法,本来就是传常对象那么就不可以更改它的值,所以返回值加const{assert(pos >= 0 && pos < Size());return str[pos];}friend MyString operator+(const char* s, const MyString& p);friend ostream& operator <<(ostream& out, const MyString& s);friend istream& operator>>(istream& in, MyString& s);
};
MyString operator+(const char* s, const MyString& p)
{//return MyString(s) + p;int len = strlen(p.str) + 1 + strlen(s);char* ps = new char[len];strcpy_s(ps, len,s);strcat_s(ps, len, p.str);//只用放一个\0。前面加了两次1 所以这里减1return MyString(ps, 1);
}
ostream& operator<<(ostream& out, const MyString& s)
{cout << s.str;return out;//实现空行}
istream& operator>>(istream& in, MyString& s)//这里存在设置大小的问题,还没有解决
{delete[]s.str;s.str = new char[256];//这里如果给大了,会产生浪费,给小了可能不够,思考解决这个问题int len = 256;in.getline(s.str, len);return in;
}
void main()
{MyString s1("yh");MyString s2("hello");MyString s3;//operator<<(cout,s2);cout << s2 << endl;cout << s1 << endl;//s3 = s1;//s3.Print();//s1.Print();//s3 = s1 + s2;//s3.Print();//s3 = "new" + s1;//s3.Print();//s3 = s2 + "new";//s3.Print();//s3 = s1 += s2;//s3.Print();char ch = s1[0];//cout << ch << endl;s1[0] = 'x';//引用返回创建了副本,返回别名就可以修改//s1.Print();
}

相关文章:

用C++编写一个MyString类

1.平台&#xff1a;vs2019 2.很多知识点写在了代码里 class MyString { private:char* str;MyString(char* p, int x){str p;} public:MyString(const char* p nullptr) :str(nullptr){if (p ! nullptr){int len strlen(p) 1;str new char[len];strcpy_s(str, len, p);}…...

Linux C语言中access函数的用法

access()函数的用法&#xff1a;int access(const char *filenpath, int mode) 一、access()函数的作用 access()函数用来判断某个指定路径的文件&#xff08;第一个参数 filenpath&#xff09;&#xff0c;是否符合第二个参数选项&#xff08;F_OK(文件是否存在&#xff09;…...

c# winform 子窗体关闭时主窗体执行指令

按下一个按钮打开子窗体&#xff0c;点 x 关闭子窗体后主窗体自动执行某些指令。例如刷新窗体&#xff0c;加载数据等。 点 x 关闭子窗体后将会执行"刷新父窗体2"下面的内容&#xff0c;其他的没试。 Config readConfigTest new Config();//new一个子窗体并打开 re…...

vue-simple-uploader的fileAdded方法不支持异步的解决办法,autoStart 设置

每日鸡汤&#xff1a;悲观者可能正确&#xff0c;但是乐观者往往成功 假设有一个需求&#xff0c;上传的pdf文档不得大于10M 使用 vue-simple-uploader 这个插件&#xff0c;我们需要在 fileAdded 事件里面进行校验&#xff0c;在1.0.0版本以后&#xff0c;如果想停止上传&…...

WormGPT – 网络犯罪分子用来犯罪的人工智能工具

WormGPT – 网络犯罪分子用来发起商业电子邮件泄露攻击的生成式人工智能工具 前言 什么是蠕虫GPT&#xff08;WormGPT&#xff09; WormGPT是基于EleutherAI于2021年创建的大型语言模型GPT-J的AI模型。它具有无限的字符支持、聊天记忆保留和代码格式化功能。 如果未部署适当…...

【NLP】语音识别 — GMM, HMM

一、说明 在语音识别的深度学习&#xff08;DL&#xff09;时代之前&#xff0c;HMM和GMM是语音识别的两项必学技术。现在&#xff0c;有将HMM与深度学习相结合的混合系统&#xff0c;并且有些系统是免费的HMM。我们现在有更多的设计选择。然而&#xff0c;对于许多生成模型来说…...

中间件面试题

Redis相关面试题 此题是xx位面试题 (1)Redis Cluster,在一个请求过来的时候,数据分布在哪个节点, 使用的是有哪些算法? redis cluster 用不同的算法,就决定了数据如何分布到这些节点上去。 hash算法一致性hash算法hash slot算法(2)Redis为什么是高性能的? 基于内存…...

PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案

PHP使用Redis实战实录系列 PHP使用Redis实战实录1&#xff1a;宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案PHP使用Redis实战实录2&#xff1a;Redis扩展方法和PHP连接Redis的多种方案 Redis扩展方法和PHP连接Redis的多种方案 一、Redis扩展方法二、php操作Redis语…...

【Docker】Docker应用部署之Docker容器安装Redis

目录 一、搜索Redis镜像 二、拉取Redis镜像 三、创建容器 四、测试使用 一、搜索Redis镜像 docker search redis 二、拉取Redis镜像 docker pull redis:版本号 # 拉取对应版本的redis镜像 eg: docker pull redis:5.0 三、创建容器 docker run -id --nameredis -p 6379:637…...

【C++】STL——list的介绍和使用、list增删查改函数的介绍和使用、push_back、pop_back

文章目录 1.list的使用2.list的增删查改函数&#xff08;1&#xff09;push_front 在list首元素前插入值为val的元素&#xff08;2&#xff09;pop_front 删除list中第一个元素&#xff08;3&#xff09;push_back 在list尾部插入值为val的元素&#xff08;4&#xff09;pop_ba…...

“RWEQ+”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践

土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2&#xff0c;占国土总面积的16.7%&#xff0c;严重影响这些地区的资源开发和社会经…...

ChatGPT在智能推送和个性化广告中的应用如何?

ChatGPT在智能推送和个性化广告领域具有广泛的应用潜力。智能推送和个性化广告是指根据用户的个性化需求和兴趣&#xff0c;精准地向用户推送相关的信息和广告内容。ChatGPT作为一种预训练的通用语言模型&#xff0c;具有强大的语言理解和生成能力&#xff0c;可以在智能推送和…...

科技的成就(四十八)

373、新的编程语言 Swift 2014 年 6 月 2 日&#xff0c;苹果在 WWDC 上发布了新的编程语言 Swift。Swift 由克里斯拉特纳在苹果内部主持开发&#xff0c;历时 4 年。它是一种支持多编程范式的可编译语言&#xff0c;其设计简单、高效、安全&#xff0c;用来开发 macOS/OS X、i…...

spring5高级49讲

文章目录 1、BeanFactory与ApplicationContext2、BeanFactory与ApplicationContext的容器实现BeanFactory的容器实现后处理器排序 ApplicationContext的容器实现 3、Bean的生命周期Bean后处理器 4、常见的Bean后处理器5、常见BeanFactory后处理器6、Aware和InitializingBean接口…...

MacOS本地安装Hadoop3

金翅大鹏盖世英&#xff0c;展翅金鹏盖世雄。 穿云燕子锡今鸽&#xff0c;踏雪无痕花云平。 ---------------- 本文密钥&#xff1a;338 ----------------- 本文描述了在macbook pro的macos上安装hadoop3的过程&#xff0c;也可以作为在任何类linux平台上安装hadoop3借鉴。 …...

十五章:使用类别峰值响应的弱监督实例分割

0.摘要 目前&#xff0c;使用图像级别标签而不是昂贵的像素级掩码进行弱监督实例分割的研究还未得到充分探索。本文通过利用类别峰值响应来实现一个分类网络&#xff0c;用于提取实例掩码&#xff0c;来解决这个具有挑战性的问题。只通过图像标签的监督下&#xff0c;完全卷积的…...

自然语言处理从入门到应用——LangChain:模型(Models)-[聊天模型(Chat Models):基础知识]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 聊天模型是语言模型的一种变体。虽然聊天模型在内部使用语言模型&#xff0c;但它们公开的接口略有不同。它们不是提供一个“输入文本&#xff0c;输出文本”的API&#xff0c;而是提供一个以“聊天消息”作为输入和输…...

Asp.Net 使用Log4Net (SQL Server)

Asp.Net 使用Log4Net (SQL Server) 1. 创建数据库表 首先&#xff0c;在你的SQL Server数据库中创建一个用于存储日志的表。以下是一个简单的表结构示例&#xff1a; CREATE TABLE [dbo].[Logs]([Id] [INT] IDENTITY(1,1) PRIMARY KEY,[Date] [DATETIME] NOT NULL,[Thread] …...

Vue2基础五、工程化开发

零、文章目录 Vue2基础五、工程化开发 1、工程化开发和脚手架 &#xff08;1&#xff09;开发 Vue 的两种方式 核心包传统开发模式&#xff1a;基于 html / css / js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。工程化开发模式&#xff1a;基于构建工具&#xf…...

发现 ModStartCMS:构建梦想网站的全新选择

亲爱的网站开发者和内容创作者们&#xff0c; 在当今数字化的时代&#xff0c;网站已经成为展示品牌、传递信息和吸引目标受众的关键渠道。为了帮助您更高效地打造梦想中的网站&#xff0c;我们荣幸地向您介绍 ModStartCMS&#xff0c;这是一款基于 Laravel 的全新模块化内容管…...

学术场景实战:DeepSeek-OCR-2驱动深求·墨鉴实现论文公式精准提取

学术场景实战&#xff1a;DeepSeek-OCR-2驱动深求墨鉴实现论文公式精准提取 1. 引言&#xff1a;学术研究中的公式提取痛点 如果你是一名理工科的研究生、科研工作者&#xff0c;或者经常需要阅读学术论文&#xff0c;你一定遇到过这样的场景&#xff1a;在PDF论文里看到一个…...

猫抓cat-catch:高效媒体捕获与资源下载全指南

猫抓cat-catch&#xff1a;高效媒体捕获与资源下载全指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓cat-catch是一款专注于网页媒体资源捕…...

终极指南:如何使用IEA-15-240-RWT 15兆瓦海上风力涡轮机参考模型开启风能研究

终极指南&#xff1a;如何使用IEA-15-240-RWT 15兆瓦海上风力涡轮机参考模型开启风能研究 【免费下载链接】IEA-15-240-RWT 15MW reference wind turbine repository developed in conjunction with IEA Wind 项目地址: https://gitcode.com/gh_mirrors/ie/IEA-15-240-RWT …...

数据安全与性能瓶颈困扰企业?湖南天硕SSD固态硬盘带来航天级稳定体验

在数字化转型加速的今天&#xff0c;企业数据量呈指数级增长&#xff0c;随之而来的数据安全风险与存储性能瓶颈已成为众多企业&#xff0c;尤其是对数据可靠性要求极高的B端用户&#xff08;如企业采购负责人、技术总监&#xff09;面临的共同挑战。传统存储方案在应对复杂业务…...

实战应用:基于快马AI生成的代码,快速构建全功能在线学术期刊平台

实战应用&#xff1a;基于快马AI生成的代码&#xff0c;快速构建全功能在线学术期刊平台 最近在帮学校实验室搭建一个开源学术期刊的在线投稿系统&#xff0c;正好体验了InsCode(快马)平台的AI代码生成功能。整个过程比想象中顺利很多&#xff0c;从需求分析到可运行的原型只用…...

英雄联盟玩家的终极效率工具:League-Toolkit 完整指南

英雄联盟玩家的终极效率工具&#xff1a;League-Toolkit 完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为错过匹配确认而烦恼&a…...

cool-admin(midway版)后端日志管理:日志聚合与集中式存储终极指南

cool-admin(midway版)后端日志管理&#xff1a;日志聚合与集中式存储终极指南 【免费下载链接】cool-admin-midway &#x1f525; cool-admin(midway版)一个很酷的后台权限管理框架&#xff0c;模块化、插件化、CRUD极速开发&#xff0c;永久开源免费&#xff0c;基于midway.js…...

重新定义交通安全研究范式:基于无人机轨迹数据的数字孪生解决方案

重新定义交通安全研究范式&#xff1a;基于无人机轨迹数据的数字孪生解决方案 【免费下载链接】UCF-SST-CitySim1-Dataset 项目地址: https://gitcode.com/gh_mirrors/ucf/UCF-SST-CitySim-Dataset 在自动驾驶技术快速发展的今天&#xff0c;传统交通安全研究面临着一个…...

论计算机科学的本质是什么?编程么?

计算机科学的本质不是编程。编程只是实现计算机科学思想的工具和手段&#xff0c;而非其内核。计算机科学的核心是“计算”与“问题求解”计算机科学&#xff08;Computer Science, CS&#xff09;本质上是一门研究信息与计算的理论基础&#xff0c;以及如何通过算法高效、可靠…...

iOS开发效率工具:设备支持文件管理完全指南 - 无需升级Xcode的解决方案

iOS开发效率工具&#xff1a;设备支持文件管理完全指南 - 无需升级Xcode的解决方案 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport 作为iOS开发者&#xff0c;你是否曾遭遇这样…...