嵌入式入门Day42

server/2025/1/18 19:22:35/

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.ppmy.cn/server/159429.html

相关文章

SQL 基础教程 - SQL SELECT INTO 语句

通过 SQL&#xff0c;您可以从一个表复制信息到另一个表。 SELECT INTO 语句从一个表复制数据&#xff0c;然后把数据插入到另一个新表中。 SQL SELECT INTO 语句 SELECT INTO 语句从一个表复制数据&#xff0c;然后把数据插入到另一个新表中。 注意&#xff1a; MySQL 数据…

【第四课】冒泡排序,快速排序(acwing-785)

目录 冒泡排序 快速排序 死循环问题&#xff1a; 基准元素的选择&#xff1a; 快排代码如下 递归时间复杂度&#xff1a; 空间暴力代码 冒泡排序 因为之前学过冒泡排序&#xff0c;在没接触快速排序算法之前这道题我就用冒泡做了。 #include <iostream> usin…

k8s 集群组件

在 Kubernetes&#xff08;k8s&#xff09;中&#xff0c;以下是一些重要的集群组件&#xff0c;可以通过 kubectl get componentstatuses 命令查看它们的状态&#xff1a; 一、Controller Manager&#xff08;控制器管理器&#xff09; 功能&#xff1a; 负责运行各种控制器…

P10250 下楼梯 题解

传送门 题目大意&#xff1a;走楼梯可以一步走 1 到 3 级&#xff0c;求到 n 级的方案数。 思路&#xff1a;参照斐波那契数列&#xff0c;dp[i]dp[i-1]dp[i-2]dp[i-3]。 AC Code&#xff1a; #include<bits/stdc.h> using namespace std; long long a[60]; int main()…

无人机(Unmanned Aerial Vehicle, UAV)路径规划介绍

无人机&#xff08;Unmanned Aerial Vehicle, UAV&#xff09;是无人驾驶飞行器的简称。凭借其体积小巧、操作简便、生存能力强等诸多优势&#xff0c;无人机在军事、电力巡检、航空航天与科学研究等诸多领域得到了广泛应用。在执行任务时&#xff0c;无人机可搭载多种传感器设…

AWS设计和实现无人机图形显示和控制系统

设计 无人机图形显示和控制系统 涉及多个组件&#xff0c;这些组件组合在一起以确保实时监控和精确控制。 要使用 AWS 实施 无人机图形显示和控制系统&#xff0c;您需要通过云基础设施将实时视频流、遥测监控和远程控制相结合。AWS 提供了 IoT Core、Kinesis 和 Lambda 等强大…

Ubuntu 磁盘修复

Ubuntu 磁盘修复 在 ubuntu 文件系统变成只读模式&#xff0c;该处理呢&#xff1f; 文件系统内部的错误&#xff0c;如索引错误、元数据损坏等&#xff0c;也可能导致系统进入只读状态。磁盘坏道或硬件故障也可能引发文件系统只读的问题。/etc/fstab配置错误&#xff0c;可能…

uniapp(小程序、app、微信公众号、H5)预览下载文件(pdf)

1. 小程序、app 在uniapp开发小程序环境或者app环境中,都可以使用以下方式预览文件 之前其实写过一篇,就是使用uniapp官网提供文件下载、文件保存、文件打开的API, uniapp文件下载 感兴趣也可以去看下 uni.downloadFile({// baseURL 是