嵌入式入门Day42

C++ Day5

  • 作业

作业

//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.rhkb.cn/news/1333.html

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

相关文章

栈 (算法十二)

1.删除字符串中的所有相邻项 link:1047. 删除字符串中的所有相邻重复项 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 栈&#xff0b;模拟 code class Solution { public:string removeDuplicates(string s) {// 栈来模拟即可// string代替栈string ans;for(…

特制一个自己的UI库,只用CSS、图标、emoji图 第二版

图&#xff1a; 代码&#xff1a; index.html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>M…

Linux第二课:LinuxC高级 学习记录day01

0、大纲 0.1、Linux 软件安装&#xff0c;用户管理&#xff0c;进程管理&#xff0c;shell 命令&#xff0c;硬链接和软连接&#xff0c;解压和压缩&#xff0c;功能性语句&#xff0c;结构性语句&#xff0c;分文件&#xff0c;make工具&#xff0c;shell脚本 0.2、C高级 …

数据结构(Java版)第八期:LinkedList与链表(三)

专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 目录 一、链表中的经典面试题 1.1. 链表分割 1.2. 链表的回文结构 1.3. 相交链表 1.4. 环形链表 一、链表中的经典面试题 1.1. 链表分割 题目中要求不能改变原来的数据顺序&#xff0c;也就是如上图所示。…

自动连接校园网wifi脚本实践(自动网页认证)

目录 起因执行步骤分析校园网登录逻辑如何判断当前是否处于未登录状态&#xff1f; 书写代码打包设置开机自动启动 起因 我们一般通过远程控制的方式访问实验室电脑&#xff0c;但是最近实验室老是断电&#xff0c;但重启后也不会自动连接校园网账户认证&#xff0c;远程工具&…

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法&#xff0c;以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…

目标检测中的Bounding Box(边界框)介绍:定义以及不同表示方式

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

【C语言】获取文件属性

目录 1. stat函数 2. 获取文件属性 3. 获取文件权限 1. stat函数 int stat(const char *path, struct stat *buf); 功能&#xff1a;获取文件属性 参数&#xff1a; path&#xff1a;文件路径名buf&#xff1a;保存文件属性信息的结构体 返回值&#xff1a;成功&#xff1…

springboot

springboot排出tomcat服务器&#xff0c;当成spring容器使用 springboot-mybatis springboot-mybatisplus 整合druid

【算法】将单链表按值划分

问&#xff1a; 将单链表按某值划分成左边小、中间相等、右边大的形式 答&#xff1a; 笔试&#xff1a;初始化一个Node类型的数组&#xff0c;对数组进行partition&#xff0c;然后把数组中的节点元素串成链表 public static Node listPartition1(Node head, int pivot) {…

图解Git——分支的新建与合并《Pro Git》

⭐分支的新建与合并 先引入一个实际开发的工作流&#xff1a; 开发某个网站。为实现某个新的需求&#xff0c;创建一个分支。在这个分支上开展工作。 正在此时&#xff0c;你突然接到一个电话说有个很严重的问题需要紧急修补。你将按照如下方式来处理&#xff1a; 切换到你…

Web前端界面开发

前沿&#xff1a;介绍自适应和响应式布局 自适应布局&#xff1a;-----针对页面1个像素的变换而变化 就是我们上一个练习的效果 我们的页面效果&#xff0c;随着我们的屏幕大小而发生适配的效果&#xff08;类似等比例&#xff09; 如&#xff1a;rem适配 和 vw/vh适配 …

解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题

1. IsaacGymEnvs项目介绍 IsaacGymEnvs&#xff1a;基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库&#xff0c;专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎&#xf…

服务器数据恢复—raid5故障导致上层ORACLE无法启动的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台服务器上的8块硬盘组建了一组raid5磁盘阵列。上层安装windows server操作系统&#xff0c;部署了oracle数据库。 raid5阵列中有2块硬盘的硬盘指示灯显示异常报警。服务器操作系统无法启动&#xff0c;ORACLE数据库也无法启动。 服…

MySQL批量修改数据表编码及字符集为utf8mb4

​​​​​​MySQL批量修改数据表编码及字符集为utf8mb4 utf8mb4编码是utf8编码的超集&#xff0c;兼容utf8&#xff0c;并且能存储4字节的表情字符。 采用utf8mb4编码的好处是&#xff1a;存储与获取数据的时候&#xff0c;不用再考虑表情字符的编码与解码问题。 更改数据库…

Day05-后端Web基础——TomcatServletHTTP协议SpringBootWeb入门

目录 Web基础知识课程内容1. Tomcat1.1 简介1.2 基本使用1.2.1 下载1.2.2 安装与卸载1.2.3 启动与关闭1.2.4 常见问题 2. Servlet2.1 快速入门2.1.1 什么是Servlet2.1.2 入门程序2.1.3 注意事项 2.2 执行流程 3. HTTP协议3.1 HTTP-概述3.1.1 介绍3.1.2 特点 3.2 HTTP-请求协议3…

python-42-使用selenium-wire爬取微信公众号下的所有文章列表

文章目录 1 seleniumwire1.1 selenium-wire简介1.2 获取请求和响应信息2 操作2.1 自动获取token和cookie和agent2.3 获取所有清单3 异常解决3.1 请求url失败的问题3.2 访问链接不安全的问题4 参考附录1 seleniumwire Selenium WebDriver本身并不直接提供获取HTTP请求头(header…

Android SDK下载安装(图文详解)

安装完sdk&#xff0c;就可以直接使用adb命令了&#xff0c;我们做app自动化测试&#xff0c;也需要sdk环境的依赖。 1. 下载Android SDK 网盘下载地址&#xff1a;https://pan.quark.cn/s/8398e52cefc9 官网下载地址&#xff1a;https://www.androiddevtools.cn/ &#xff08;…

【HM-React】08. Layout模块

基本结构和样式reset 结构创建 实现步骤 打开 antd/Layout 布局组件文档&#xff0c;找到示例&#xff1a;顶部-侧边布局-通栏拷贝示例代码到我们的 Layout 页面中分析并调整页面布局 代码实现 pages/Layout/index.js import { Layout, Menu, Popconfirm } from antd impor…

51单片机入门基础

目录 一、基础知识储备 &#xff08;一&#xff09;了解51单片机的基本概念 &#xff08;二&#xff09;掌握数字电路基础 &#xff08;三&#xff09;学习C语言编程基础 二、开发环境搭建 &#xff08;一&#xff09;硬件准备 &#xff08;二&#xff09;软件准备 三、…