9.23作业

仿照string类,自己手动实现 My_string

代码如下

MyString.h
#ifndef MYSTRING_H
#define MYSTRING_H
#include <iostream>
#include <cstring>using namespace std;class My_string
{
private:char *ptr;         //指向字符数组的指针int size;           //字符串的最大容量int len;            //字符串当前容量public://无参构造My_string();//有参构造My_string(const char* src);My_string(int num, char value);//拷贝构造My_string(const My_string &other);//拷贝赋值My_string & operator= (const My_string &other);//析构函数~My_string();//判空bool Isvoid();//显示void show();//尾插void push_back(char value);//尾删void pop_back();//at函数实现char &at(int index);//清空函数void clear();//返回C风格字符串char *data();//返回实际长度int get_length();//返回当前最大容量int get_size();//君子函数:二倍扩容bool Add();};
#endif // MYSTRING_H
MyString.cpp
#include "MyString.h"My_string::My_string():size(15)
{this->ptr = new char[size];this->ptr[0] = '\0';            //表示串为空串this->len = 0;cout<<"无参构造"<<endl;
}//有参构造
My_string::My_string(const char* src):size(15) {this->ptr = new char[size];strcpy(ptr, src); // 复制字符串this->len = strlen(src);cout << "一个形参的有参构造" << endl;
}
My_string::My_string(int num, char value):size(15),len(num){if(num>15){cout<<"超出默认长度"<<endl;return;}this->ptr = new char[15];for(int i=0;i<num;i++){this->ptr[i] = value;}cout<<"部分形参的有参构造"<<endl;
}
//拷贝构造
My_string::My_string(const My_string &other):size(other.size),len(other.len){this->ptr = new char[size];strcpy(this->ptr, other.ptr); // 复制字符串cout<<"拷贝构造"<<endl;
}
//拷贝赋值
My_string& My_string::operator= (const My_string &other){if(this != &other){this->len =other.len;this->size = other.size;for(int i=0;i<other.len;i++){this->ptr[i] =other.ptr[i];}}cout<<"拷贝赋值"<<endl;return *this;
}
//析构函数
My_string::~My_string(){cout<<this->ptr<<"析构函数"<<endl;delete[] ptr;
}
//判空
bool My_string::Isvoid(){return this->len ==0 ? true:false;
}
//显示
void My_string::show(){for(int i=0;i<this->len;i++){cout<<*(this->ptr+i);}cout<<endl;
}
//尾插
void My_string::push_back(char value){if(this->len < this->size-1){*(this->ptr+len++) = value;}else if(this->Add()){*(this->ptr+len++) = value;}
}
//尾删
void My_string::pop_back(){this->len--;
}
//at函数实现
char& My_string::at(int index){if(index<=this->len-1){return this->ptr[index];}else {cout<<"下标越界"<<endl;exit(EXIT_SUCCESS);}
}
//清空函数
void My_string::clear(){free(this->ptr);this->ptr[0] = '\0';this->len = 0;
}
//返回C风格字符串
char* My_string::data(){return this->ptr;
}
//返回实际长度
int My_string::get_length(){return this->len;
}
//返回当前最大容量
int My_string::get_size(){return this->size;
}bool My_string::Add(){if(this->len == this->size-1){char *p = new char[size*2];strcpy(p,this->ptr);free(this->ptr);this->ptr = p;return true;}else return false;
}
main.cpp
#include "MyString.h"int main(){My_string s;cout<<"s:";s.show();My_string s1("hello");cout<<"s1:";s1.show();My_string s2(5,'A');cout<<"s2:";s2.show();My_string s3 = s2;cout<<"s3:";s3.show();s3 = s1;cout<<"s3:";s3.show();if(s3.Isvoid()){cout<<"s3空"<<endl;}else cout<<"s3非空"<<endl;cout<<"尾插:";s3.push_back('a');s3.show();cout<<"尾删:";s3.pop_back();s3.show();cout<<"查看下标4的值:"<<s3.at(4)<<endl;cout<<"清空s3函数"<<endl;s3.clear();cout<<"s3:";s3.show();cout<<"s1的C风格字符串:"<<s1.data()<<endl;cout<<"s1的实际长度:"<<s1.get_length()<<endl;cout<<"s1当前最大容量:"<<s1.get_size()<<endl;
//    cout<<"s3的二倍扩容"<<endl;
//    char c =' ';
//    while(c!='#'){
//        cin>>c;
//        s3.push_back(c);
//    }//s3.show();
}

运行结果

在这里插入图片描述

思维导图

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode:1014. 最佳观光组合 + 思维题】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

5G-A“用铲子挖金子”,为何在云南地区商用成功?

作者 | 曾响铃 文 | 响铃说 随着技术的成熟与应用&#xff0c;AI、5G-A、物联网等前沿技术领域在市场看来都属于“金矿”型产业&#xff0c;蕴藏着巨大的经济财富。然而&#xff0c;在如今的市场上&#xff0c;“挖金子”的不好过&#xff0c;反而是卖“铲子”的人赚得盆满钵…

MySQL --基本查询(下)

文章目录 3.Update3.1将孙悟空同学的数学成绩变更为 80 分3.2将曹孟德同学的数学成绩变更为 60 分&#xff0c;语文成绩变更为 70 分3.3将总成绩倒数前三的 3 位同学的数学成绩加上 30 分3.4将所有同学的语文成绩更新为原来的 2 倍 4.Delete4.1删除数据4.1.1删除孙悟空同学的考…

微软推迟在MDM设备上启用OOBE强制更新 因为IT管理员反馈称缺乏控制

微软很久之前就计划在 Windows 10/11 OOBE 期间强制下载更新&#xff0c;即若检测到系统本身属于旧版本例如并未安装最新累积更新&#xff0c;则在 OOBE 期间强制下载最新累积更新并自动安装。这种更新方式已经在面向消费者的设备上启用&#xff0c;而上周微软则是在适用于企业…

CSS文档流以及脱离文档流的方法

文档流 文档流是文档中可显示对象在排列时占用的位置/空间。例如&#xff1a;块元素自上而下摆放&#xff0c;内联元素从左到右摆放。&#xff08;文档流中限制非常的多&#xff0c;导致很多页面效果无法实现)。 常见文档流限制 高低不齐&#xff0c;底边对齐 <head>&…

机器学习之概念1

今天去上机器学习的课&#xff0c;其中我觉得可以套用之前学的强化学习&#xff0c;其中P是评估&#xff0c;T是任务&#xff0c;E是经验&#xff0c;就是利用经验来提高相关的评估任务&#xff0c;从数据中学习&#xff0c;从统计机器中学习&#xff0c;其中可以分为有监督的机…

大型语言模型(Large Language Models)的介绍

背景 大型语言模型&#xff08;Large Language Models&#xff0c;简称LLMs&#xff09;是一类先进的人工智能模型&#xff0c;它们通过深度学习技术&#xff0c;特别是神经网络&#xff0c;来理解和生成自然语言。这些模型在自然语言处理&#xff08;NLP&#xff09;领域中扮…

MySQL | 实战 | 4 种将数据同步到ES方案

文章目录 1. 前言2. 数据同步方案2.1 同步双写2.2 异步双写2.3 定时更新2.4 基于 Binlog 实时同步 3. 数据迁移工具选型3.1 Canal3.2 阿里云 DTS3.3 Databus3.4 Databus和Canal对比3.4 其它 4. 后记 上周听到公司新同事分享 MySQL 同步数据到 ES 的方案&#xff0c;发现很有意思…

独立游戏《Project:Survival》UE5C++开发日志0——游戏介绍

该游戏是《星尘异变》团队的下一款作品&#xff0c;太空科幻题材的生存游戏&#xff0c;我将负责使用C、蓝图实现游戏的基础框架和核心功能&#xff0c;其中还包含使用人工智能算法助力游戏开发或帮助玩家运营 目前已有功能&#xff1a; 1.3D库存系统&#xff1a;所有库存中的物…

【运维监控】influxdb 2.0 + grafana 11 监控jmeter 5.6.3 性能指标(完整版)

运维监控系列文章入口&#xff1a;【运维监控】系列文章汇总索引 文章目录 一、部署influxdb2.0二、部署grafana三、jmeter配置1、下载jmeter插件2、部署jmeter插件3、添加Backend Listener 四、grafana集成influxdb监控jmeter1、建立grafana数据源2、导入grafana模板3、验证1&…

秒表【JavaScript】

这个代码实现了一个基本的功能性秒表。 实现功能&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sc…

文档矫正算法:DocTr++

文档弯曲矫正&#xff08;Document Image Rectification&#xff09;的主要作用是在图像处理领域中&#xff0c;对由于拍摄、扫描或打印过程中产生的弯曲、扭曲文档进行校正&#xff0c;使其恢复为平整、易读的形态。 一. 论文和代码 论文地址&#xff1a;https://arxiv.org/…

Android NestedScrollView+TabLayout+ViewPager+ 其它布局,ViewPager 不显示以及超出屏幕不显示问题

前言 此场景为 NestedScrollView 嵌套多个布局 &#xff0c;大致结构为 NestedScrollViewTabLayoutViewPagerfragment 其它View,如下图 &#xff0c; 一、ViewPager 设置高度才会显示内容问题 原因&#xff1a;NestedScrollView 计算高度先于 ViewPager 渲染前&#xff0c;所…

动手学深度学习8.7. 通过时间反向传播-笔记练习(PyTorch)

本节课程地址&#xff1a;本节无视频 本节教材地址&#xff1a;8.7. 通过时间反向传播 — 动手学深度学习 2.0.0 documentation (d2l.ai) 本节开源代码&#xff1a;...>d2l-zh>pytorch>chapter_multilayer-perceptrons>bptt.ipynb 通过时间反向传播 到目前为止&…

输出Hate-C语言

1.问题&#xff1a; C语言实现先后输出Hate四个字符。 2.解答&#xff1a; 定义4个字符变量&#xff0c;分别赋以初值H、a、t、e&#xff0c;然后用putchar函数输出4个字符变量的值。 3.代码&#xff1a; #include<stdio.h>int main(){char character1,character2,ch…

ArcGIS Desktop使用入门(三)图层右键工具——拓扑(下篇:地理数据库拓扑)

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…

CSS中的多种关系选择器

后代选择器 选择所有被E元素包含的F元素&#xff0c;中间用空格隔开。 例&#xff1b; <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

使用Docker一键部署Blossom笔记软件

Blossom 是一个需要私有部署的笔记软件,虽然本身定位是一个云端软件,但你仍然可以在本地部署,数据和图片都将保存在你的设备,不依赖任何的图床或者对象存储。 客户端:支持 Windows 端和 ARM 架构的 Mac 端,以及作为网页端部署。移动端:响应式网页移动端,主要为移动端设…

基于单片机的智能窗帘控制系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DHT11温湿度传感器检测温湿度&#xff0c;滑动变阻器连接ADC0832数模转换器转换模拟,光敏传感器&#xff0c;采用GP2D12红外传感器&#xff0c;通过LCD1602显示屏显示…

3DMAX乐高建筑生成器插件LegoBuilding使用方法详解

3DMAX乐高建筑生成器插件LegoBuilding使用教程 3DMAX乐高建筑生成器插件LegoBuilding&#xff0c;一键批量生成随机的乐高积木样式建筑群&#xff0c;可作为配景楼建模使用。可根据闭合样条线画定范围或地形&#xff08;网格&#xff09;对象表面范围和起伏批量生成随机形状的乐…