嵌入式入门Day42

@toc

作业

//main.cpp
#include <iostream>
#include "mystring.h"using namespace std;int main()
{mystring stra("Hello");mystring strb;cin >> strb;cout << strb << endl;strb += stra;cout << strb << endl;strb = strb + stra;cout << strb << endl;cin >> strb;cout << strb << endl;if(stra == strb){cout << "=" << endl;}else if(stra > strb){cout << ">" << endl;}else if(stra < strb){cout << "<" << endl;}return 0;
}
#ifndef MYSTRING_H
#define MYSTRING_H#include <cstring>
#include <iostream>using namespace std;class mystring
{
private:char *str;int size;int len;
public://无参构造函数mystring();//有参构造函数1mystring(const char * s);//有参构造函数2mystring(int n, char ch);//拷贝构造函数mystring(mystring &other);//访问元素函数char &at(int i);//判空函数bool is_empty();//自动扩容函数void full();//获取C风格字符串char *get_c();//获取空间实际长度int get_size();//获取字符串的实际长度int get_len();//展示函数void show();//+=运算符重载mystring &operator+=(const mystring &other);//=运算符重载mystring &operator=(const mystring &other);//[]运算符重载char &operator[](int i);//+运算符重载mystring operator+(const mystring &other) const;//==运算符重载bool operator==(const mystring &other) const;// !=运算符重载bool operator!=(const mystring &other) const;//<运算符重载bool operator<(const mystring &other) const;//>运算符重载bool operator>(const mystring &other) const;//>运算符重载bool operator>=(const mystring &other) const;//>运算符重载bool operator<=(const mystring &other) const;// cout << 重载friend ostream &operator<<(ostream &L,const mystring &R);// cin >> 重载friend istream &operator>>(istream &L,const mystring &R);};#endif // MYSTRING_H
#include "mystring.h"//无参构造函数
mystring::mystring() : str(new char[10]), size(10) , len(0)
{}//有参构造函数1
mystring::mystring(const char *s) : str(new char[strlen(s)]), size(strlen(s)), len(size)
{//参数列表:申请strlen大小的空间,size和len均设置为这个大小//将s中的内容拷贝到str中strcpy(str,s);
}mystring::mystring(int n, char ch) : str(new char[n+1]), size(n+1) ,len(size)
{//参数列表:申请n+1的空间,size和len均设置为这个大小//拼接字符串for(int i= 0; i < n; i++){str[i] = ch;}str[n+1] = 0;
}mystring::mystring(mystring &other): str(new char[other.get_len()]), size(other.get_len()) ,len(size)
{//参数列表:申请大小为other对象中str大小的空间,size和len均设置为这个值//拷贝other中字符串的值到str中strcpy(str, other.str);
}char &mystring::at(int i)
{//判断访问位置是否合理if(i>=1 && i < len)return str[i-1];elsereturn str[-1];
}bool mystring::is_empty()
{//判断是否为空return len;
}void mystring::full()
{//判断修改后字符串的预计长度是否大于堆区空间的长度if(len > size){//创建一个临时指针,指向新申请大小为2*size的堆区空间char *temp = new char[2*size];//将老空间中的数据移动到新空间中memmove(temp, str, len);//释放老的堆区空间delete []str;//将str指针指向新的堆区空间str = temp;//扩容完毕,size变为两倍size = size*2;//temp指针闲置,置空temp = NULL;}}char *mystring::get_c()
{//返回字符指针,用于C风格操作return this->str;
}int mystring::get_size()
{//返回堆区空间大小return size;
}int mystring::get_len()
{//返回字符串的实际长度return len;
}void mystring::show()
{//输出字符串内容cout << str << endl;
}mystring &mystring::operator+=(const mystring &other)
{//求出拼接后的长度len += other.len;//判断一下是否需要扩容full();//拼接两个字符串strcat(str, other.str);return *this;
}mystring &mystring::operator=(const mystring &other)
{size = other.size;len = other.len;for(int i = 0; i < len; i++){str[i] = other.str[i];}return *this;
}char &mystring::operator[](int i)
{return str[i-1];
}mystring mystring::operator+(const mystring &other) const
{mystring temp;temp.str = new char[this->len + other.len];temp.size = this->len + other.len;temp.len = this->len + other.len;strcat(temp.str, str);strcat(temp.str,other.str);return temp;
}bool mystring::operator==(const mystring &other) const
{bool flag = true;if(len != other.len || strcmp(str,other.str)){flag = false;}return flag;
}bool mystring::operator!=(const mystring &other) const
{bool flag = true;if(len == other.len && strcmp(str,other.str)){flag = false;}return flag;
}bool mystring::operator<(const mystring &other) const
{bool flag = true;if(len >= other.len){flag = false;}return flag;
}bool mystring::operator>(const mystring &other) const
{bool flag = true;if(len <= other.len){flag = false;}return flag;
}bool mystring::operator>=(const mystring &other) const
{bool flag = true;if(len < other.len){flag = false;}return flag;}bool mystring::operator<=(const mystring &other) const
{bool flag = true;if(len > other.len){flag = false;}return flag;
}istream &operator>>(istream &L, const mystring &R)
{L >> R.str;return L;
}ostream &operator<<(ostream &L, const mystring &R)
{L << R.str;return L;
}

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

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

相关文章

快速、可靠且高性价比的定制IP模式提升芯片设计公司竞争力

作者&#xff1a;Karthik Gopal&#xff0c;SmartDV Technologies亚洲区总经理 智权半导体科技&#xff08;厦门&#xff09;有限公司总经理 无论是在出货量巨大的消费电子市场&#xff0c;还是针对特定应用的细分芯片市场&#xff0c;差异化芯片设计带来的定制化需求也在芯片…

QT中,在子线程中更新UI,会出现哪些问题,如何避免这种情况发生。

在Qt中&#xff0c;直接从子线程更新UI&#xff08;用户界面&#xff09;通常会导致各种问题&#xff0c;主要是因为Qt的UI组件&#xff08;如QWidget及其子类&#xff09;并不是线程安全的。具体来说&#xff0c;可能会出现以下问题&#xff1a; 崩溃和未定义行为&#xff1a;…

【Git版本控制器--1】Git的基本操作--本地仓库

目录 初识git 本地仓库 认识工作区、暂存区、版本库 add操作与commit操作 master文件与commit id 修改文件 版本回退 撤销修改 删除文件 初识git Git 是一个分布式版本控制系统&#xff0c;主要用于跟踪文件的更改&#xff0c;特别是在软件开发中。 为什么要版本…

2025宝塔API一键建站系统PHP源码

源码介绍 2025宝塔API一键建站系统PHP源码&#xff0c;对接自己的支付&#xff0c;虚拟主机也能搭建&#xff0c;小白式建站系统&#xff0c;基于宝塔面板搭建的建站系统&#xff0c;功能丰富&#xff0c;多款模板&#xff0c;每日更新 上传源码到服务器&#xff0c;浏览器访问…

在IDEA上运行Java项目

新建一个项目&#xff0c;下面创建模块&#xff0c;然后在src下新建包名&#xff0c;最后见类&#xff08;class&#xff09; 设置主题 settings>apparence 设置字体 Editor> Font 设置注释 Editor>Color Scheme>Language Defaults>Comments 设置自动导包 …

【机器学习】主动学习-增加标签的操作方法-成员查询合成(Membership Query Synthesis, MQS)

成员查询合成&#xff08;Membership Query Synthesis, MQS&#xff09;是一个主要应用于机器学习、计算学习理论和自然语言处理&#xff08;NLP&#xff09;等领域的概念。它描述了一种框架或技术&#xff0c;其中学习系统&#xff08;如算法&#xff09;可以主动生成查询&…

2025年01月13日Github流行趋势

1. 项目名称&#xff1a;Jobs_Applier_AI_Agent 项目地址url&#xff1a;https://github.com/feder-cr/Jobs_Applier_AI_Agent项目语言&#xff1a;Python历史star数&#xff1a;25929今日star数&#xff1a;401项目维护者&#xff1a;surapuramakhil, feder-cr, cjbbb, sarob…

DHCP、MSTP+VRRP总结实验

R1即使服务器&#xff08;给予dhcp的地址的&#xff09; [LSW1]int Eth-Trunk 12 [LSW1-Eth-Trunk12]mode manual load-balance //配置链路聚合模式为手工负载分担模式 [LSW1-Eth-Trunk12]load-balance src-dst-mac //配置基于源目IP的负载分担模式[LSW1-Eth-Trunk12]trunk p…

【ArcGIS初学】产生随机点计算混淆矩阵

混淆矩阵&#xff1a;用于比较分类结果和地表真实信息 总体精度(overall accuracy) :指对角线上所有样本的像元数(正确分类的像元数)除以所有像元数。 生产者精度(producers accuracy) &#xff1a;某类中正确分类的像元数除以参考数据中该类的像元数(列方向)&#xff0c;又称…

F#语言的语法糖

F#语言的语法糖 引言 F#是一种强类型、函数式编程语言&#xff0c;构建在.NET平台之上。它与OCaml有很多相似之处&#xff0c;并在设计时考虑了易用性和表达能力。语法糖是编程语言中的一种特性&#xff0c;指的是为了简化代码的编写而提供的语法扩展。在F#中&#xff0c;语法…

RocketMQ、Kafka、RabbitMQ,如何选型?

如何根据应用场景选择合适的消息中间件? 分布式、微服务、高并发架构中&#xff0c;消息队列&#xff08;Message Queue&#xff0c;简称MQ&#xff09;扮演着至关重要的角色。 消息队列用于实现系统间的异步通信、解耦、削峰填谷等功能。 目前常见的MQ实现包括RabbitMQ、Rock…

Java 在 Linux 上的守护进程:如何优雅地终止和管理自启动程序

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云/阿里云/华为云/51CTO&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互…

工作效率提升:使用Anaconda Prompt 创建虚拟环境总结

目录 完整顺序命令流程&#xff08;直接照着改就行&#xff09;详细步骤解析&#xff08;想要详细解析的看过来&#xff09;1. 创建一个用于存储 Conda 环境的目录&#xff08;可选&#xff09;2. 创建新的 Conda 虚拟环境并指定路径3. 激活新创建的环境4. 安装 Jupyter Notebo…

有一台服务器可以做哪些很酷的事情

有一台服务器可以做哪些很酷的事情 今天我也来简单分享一下&#xff0c;这几年来&#xff0c;我用云服务器做了哪些有趣的事情。 服务器推荐 1. 个人博客 拥有个人服务器&#xff0c;你可以完全掌控自己的网站或博客。 与使用第三方托管平台相比&#xff0c;你能自由选择网站…

单片机实物成品-012 酒精监测

项目介绍 本项目以软硬件结合的方式&#xff0c;选择 C 语言作为程序硬件编码语言&#xff0c; 以 STM32 单片机作为核心控制板&#xff0c;在数据传输节点上连接酒精传感器对酒精浓度进行 实时检测&#xff0c;且对高浓度酒精采取强制干预和紧急预警&#xff0c;并将数据通过…

科研绘图系列:R语言绘制Y轴截断分组柱状图(y-axis break bar plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍特点意义加载R包数据下载导入数据数据预处理画图输出总结系统信息介绍 Y轴截断分组柱状图是一种特殊的柱状图,其特点是Y轴的刻度被截断,即在某个范围内省略了部分刻度。这种图表…

pytest+request+yaml+allure搭建低编码调试门槛的接口自动化框架

接口自动化非常简单&#xff0c;大致分为以下几步&#xff1a; 准备入参调用接口拿到2中response&#xff0c;继续组装入参&#xff0c;调用下一个接口重复步骤3校验结果是否符合预期 一个优秀接口自动化框架的特点&#xff1a; 【编码门槛低】&#xff0c;又【能让新手学到…

三轴云台之RTSP流分辨率

三轴云台是一种能够在三个轴向上&#xff08;通常是俯仰、偏航和滚动轴&#xff09;准确、稳定地控制其负载&#xff08;如相机、传感器等&#xff09;位置和姿态的设备。而RTSP&#xff08;Real Time Streaming Protocol&#xff09;是一种网络控制协议&#xff0c;用于控制媒…

Facebook 隐私变革之路:回顾与展望

在数字时代&#xff0c;个人隐私的保护一直是社交平台面临的重大挑战之一。作为全球最大的社交网络平台&#xff0c;Facebook&#xff08;现为Meta&#xff09;在处理用户隐私方面的变革&#xff0c;历经了多次调整与完善。本文将回顾Facebook在隐私保护方面的历程&#xff0c;…

STM32 USB组合设备 MSC CDC

STM32 USB组合设备 MSC CDC实现 教程 教程请看大佬niu_88 手把手教你使用USB的CDCMSC复合设备&#xff08;基于stm32f407&#xff09; 大佬的教程很好&#xff0c;很详细&#xff0c;我调出来了&#xff0c;代码请见我绑定的资源 注意事项 值得注意的是&#xff1a; 1、 cu…