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

国庆day2

编程

题目1:自定义字符串类实现

‌题目描述‌:

实现一个简单的自定义字符串类MyString,要求:

  • 1】支持构造函数、拷贝构造函数、赋值运算符
  • 2】实现基本的字符串操作:长度、拼接、比较
  • 3】实现对MyString 对象的输入、输出
  • 4】正确处理内存管理
#include <iostream>using namespace std;class Mystring
{
private:string *str1;
public:Mystring():str1(nullptr){cout<<"调用了无参构造函数"<<endl;}Mystring(string str1):str1(new string(str1)){cout<<"调用了有参构造函数"<<endl;}Mystring(const Mystring &other):str1(new string(*(other.str1))){cout<<"调用了拷贝构造函数"<<endl;}Mystring &operator=(const Mystring &other){if(this!=&other){delete str1;str1=new string(*(other.str1));cout<<"调用了拷贝赋值函数"<<endl;}return *this;}void show(){cout<<"字符串为:"<<*str1<<endl;}~Mystring(){cout<<"调用了析构函数"<<endl;}// 1.My_strlen函数int My_strlen(){if (str1 == nullptr)return 0;return str1->size();}// 2.My_strcat 函数Mystring My_strcat(const Mystring &other){string temp;if (str1 != nullptr)temp += *str1;if (other.str1 != nullptr)temp += *(other.str1);return Mystring(temp);}// 3.My_strcmp函数int My_strcmp(const Mystring &other){if (str1 == nullptr && other.str1 == nullptr)return 0;if (str1 == nullptr)return -1;if (other.str1 == nullptr)return 1;if (*str1 < *(other.str1))return -1;else if (*str1 > *(other.str1))return 1;elsereturn 0;}// 4. 输入输出运算符重载(友元函数)friend ostream &operator<<(ostream &os, const Mystring &obj);friend istream &operator>>(istream &is, Mystring &obj);
};// 输出运算符重载实现
ostream &operator<<(ostream &os, const Mystring &obj)
{if (obj.str1 != nullptr)os << *(obj.str1);return os;
}// 输入运算符重载实现
istream &operator>>(istream &is, Mystring &obj)
{string temp;is >> temp;if (obj.str1 != nullptr){delete obj.str1;obj.str1 = nullptr;}obj.str1 = new string(temp);return is;
}int main()
{cout<<"请输入字符串"<<endl;string str;cin>>str;Mystring str1=str;string key;while(1){cout<<"提示:strlen"<<endl;cout<<"提示:strcat"<<endl;cout<<"提示:strcmp"<<endl;cout<<"请输入你想要的操作"<<endl;cin>>key;if(key=="strlen"){cout<<"触发了长度计算"<<endl;cout<<"字符串长度是:"<<str1.My_strlen()<<endl; // 调用长度函数continue;}else if(key=="strcat"){cout<<"触发了拼接功能,请输入要拼接的字符串:"<<endl;Mystring str2;cin>>str2; // 调用输入运算符Mystring str3 = str1.My_strcat(str2); // 调用拼接函数cout<<"拼接后的字符串:"<<str3<<endl; // 调用输出运算符continue;}else if(key=="strcmp"){cout<<"触发了比较功能,请输入要比较的字符串:"<<endl;Mystring str2;cin>>str2; // 调用输入运算符int res = str1.My_strcmp(str2); // 调用比较函数if(res < 0)cout<<"原字符串小于要比较的字符串"<<endl;else if(res > 0)cout<<"原字符串大于要比较的字符串"<<endl;elsecout<<"两个字符串相等"<<endl;continue;}else if(key=="0"){cout<<"谢谢使用,再见"<<endl;return 0;}else{cout<<"输入不合法,请重新输入"<<endl;continue;}}str1.show();return 0;
}

运行结果

牛客网刷题

http://www.dtcms.com/a/434593.html

相关文章:

  • Mac添加全局变量
  • 东方美学融合真空保鲜技术,海信璀璨真空头等舱650冰箱发布
  • 网站设计风格分析牡丹江到林口火车时刻表
  • 【操作系统】外存到cpu数据流动路径
  • logits和softmax分布
  • 硬件工程师入门基础知识(九)压敏电阻
  • [Linux]学习笔记系列 -- lib/xarray.c eXtensible Array (XArray) 可扩展数组
  • 基于物理信息神经网络(PINN)求解二维稳态对流-扩散方程的MATLAB实现
  • 物流网站建设可行性分析品牌网站制作网站公司
  • 温州专业微网站制作网络公司建设125摩托车价格及图片
  • 《嵌入式 – GD32开发实战指南(RISC-V版本)》第5章 跳动的心脏-内核TIMER
  • 《嵌入式 – GD32开发实战指南(RISC-V版本)》第7章 定时器
  • 佛山新网站建设平台专业动画制作软件
  • 《WebAssembly指南》第九章:WebAssembly 导入全局字符串常量
  • ​​轻量之选:不依赖宝塔,用 NPM 与命令行部署在线工具箱​
  • RUST 静态生命周期和动态生命周期
  • Rocky Linux 8 远程管理配置指南(宿主机 VNC + KVM 虚拟机 VNC)
  • 北京网站快速备案建站手机网站
  • 第四章 信息系统管理
  • 【开发日记】记一次公司服务器中Redis服务问题排查
  • linux问题10--克隆后ip地址和源linux主机相同
  • 社交网站模版steam交易链接怎么改
  • AI重塑销售管理,突破“人”的能力边界|纷享AI主题研讨会宁波站圆满落幕
  • [C++项目组件] 后台服务器部署docker
  • 移动固态优盘坏道读写速率下降等测试
  • 解决django.db.utils.OperationalError: attempt to write a readonly database问题
  • Django SimpleUI 配置与优化详解
  • 从入门到精通:Django的深度探索之旅
  • 【数据结构】考研重点掌握:顺序查找算法实现与ASL计算详解
  • 大型网站建立1800做网站因为专业