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.mzph.cn/web/53449.shtml

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

相关文章

十大常用加密软件排行榜|2024年好用的加密软件推荐【精选】

在信息安全日益重要的时代&#xff0c;加密软件成为保护个人和企业数据的关键工具。选择合适的加密软件可以有效防止数据泄露和未授权访问。以下是2024年值得推荐的十大加密软件&#xff0c;帮助你找到适合的解决方案。 1. Ping32加密软件 Ping32是一款功能强大的加密软件&…

Linux C# Day4

作业&#xff1a; 1.统计家目录下.c文件的个数 #!/bin/bash num0 for filename in ls ~/*.c do((num)) done echo $num2.定义一个稀疏数组(下标不连续)&#xff0c;写一个函数&#xff0c;求该稀疏数组的和&#xff0c;要求稀疏数组中的数值通过参数传递到函数中arr([2]9 [4…

Android轻量级RTSP服务使用场景分析和设计探讨

技术背景 好多开发者&#xff0c;对我们Android平台轻量级RTSP服务模块有些陌生&#xff0c;不知道这个模块具体适用于怎样的场景&#xff0c;有什么优缺点&#xff0c;实际上&#xff0c;我们的Android平台轻量级RTSP服务模块更适用于内网环境下、对并发要求不高的场景&#…

基于深度学习的药品三期OCR字符识别

在药品生产线上,药品三期的喷码与条形码识别是保证药品追溯和安全管理的重要环节。传统的识别方法依赖于人工操作,不仅效率低下且容易出错。随着深度学习技术的不断发展,基于OCR(Optical Character Recognition,光学字符识别)的自动化识别系统逐渐成为主流。本文将以哪吒…

DataOps:解决数字化转型中数据价值挖掘挑战的最佳方案

云计算de小白 随着数字化转型的普及与深入&#xff0c;大数据技术在各行业被广泛应用&#xff0c;企业生产、营销、运营等各个环节的数据将被广泛采集&#xff0c;数据应用开发需求的增长、数据使用者角色的复杂度导致企业数据开发、数据运维的工作量、数据应用交付协同难度大…

电子看板实时监控数据可视化助力工厂精细化管理

在当今竞争激烈的制造业领域&#xff0c;工厂的精细化管理成为提高竞争力的关键。而电子看板实时监控数据可视化作为一种先进的管理工具&#xff0c;正为工厂的精细化管理带来巨大的助力。 一、工厂精细化管理的挑战 随着市场需求的不断变化和客户对产品质量要求的日益提高&am…

VMware ESXi 8.0U3b macOS Unlocker OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 8.0U3b macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U3 集成驱动版&#xff0c;在个人电脑上运行企业级工作负载 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-8-u3-sysin/&#xff0c;查看最新版…

CSP-J 2019 入门级 第一轮(初赛) 完善程序(1)

【题目】 CSP-J 2019 入门级 第一轮&#xff08;初赛&#xff09; 完善程序&#xff08;1&#xff09; 1.&#xff08;矩阵变幻&#xff09;有一个奇幻的矩阵&#xff0c;在不停的变幻&#xff0c;其变幻方式为&#xff1a; 数字 0 变成矩阵 0 0 0 1 数字 1 变成矩阵 1 1 1 0 …

云南自闭症康复寄宿学校:帮助孩子重塑美好未来

在云南这片充满希望的土地上&#xff0c;自闭症儿童的康复教育一直是社会各界关注的焦点。家长们渴望为孩子找到一所能够提供全面支持和专业指导的康复寄宿学校&#xff0c;帮助他们重塑美好未来。而当我们跨越地域的界限&#xff0c;将目光投向广州&#xff0c;星贝育园自闭症…

1网络安全的基本概念

文章目录 网络安全的基本概念可以总结为以下几个方面&#xff1a; 网络安全的需求&#xff1a; 信息安全的重要性&#xff1a;信息安全是计算机、通信、物理、数学等领域的交叉学科&#xff0c;对于社会的发展至关重要。信息安全的目标&#xff1a;主要包括保密性、完整性、可用…

萃取硫酸镍萃取槽技改离心萃取机

将硫酸镍萃取工艺中的萃取槽技改为离心萃取机&#xff0c;是一个旨在提高生产效率、降低能耗、改善产品质量的技术升级过程。以下是对这一技改过程的详细分析&#xff1a; 一、技改背景 传统萃取槽在硫酸镍萃取过程中存在分相效果差、澄清时间长、有夹带等问题&#xff0c;这些…

mat (Eclipse Memory Analyzer Tool)使用以及详解

前言 在Java开发中&#xff0c;内存问题往往不易被发现&#xff0c;但它们可能导致应用性能下降甚至崩溃。Eclipse Memory Analyzer Tool&#xff08;MAT&#xff09;是一个强大的开源工具&#xff0c;专门用于分析Java堆转储&#xff08;heap dumps&#xff09;文件&#xff…

WebLogic命令执行漏洞CVE-2019-2725

1.环境搭建 cd vulhub-master/weblogic/weak_password docker-compose up -d 2.漏洞验证 http://47.121.211.205:7001/_async/AsyncResponseService 说明存在漏洞 3.在当前页面抓包 修改请求包 写入shell wget http://47.121.211.205/1.txt -O servers/AdminServer/tmp/_W…

1.量化第一步,搭建属于自己的金融数据库!

数据是一切量化研究的前提。 做量化没有数据&#xff0c;就相当于做饭时没有食材。 很多时候&#xff0c;我们需要从大量的数据中寻找规律&#xff0c;并从中开发出策略。如果我们每次使用的时候&#xff0c;都从网上去找数据&#xff0c;一方面效率低下&#xff0c;另一方面短…

Redis详细解析

Redis 什么是Redis?关系型与非关系型数据库Redis可以做什么Redis入门安装在Windows系统上安装在Linux系统上安装 Redis在Linux系统上启动运行如何设置redis-server后台运行与关闭如何设置redis客户端登录时需要验证密码**设置允许远程连接redis服务**Redis数据类型Redis常用命…

Spring Boot管理用户数据

目录 学习目标前言Thymeleaf 模板JSON 数据步骤 1: 创建 Spring Boot 项目使用 Spring Initializr 创建项目使用 IDE 创建项目 步骤 2: 添加依赖步骤 3: 创建 Controller步骤 4: 新建index页面步骤 5: 运行应用程序 表单提交步骤 1: 添加 Thymeleaf 依赖在 Maven 中添加依赖 步…

LLM安全风险及应对

LLM安全风险主要从四个维度分析&#xff1a;用户输入、训练数据、模型本身以及工具和插件。 风险类别具体风险风险解释应对措施具体举例用户输入相关风险提示注入&#xff08;Prompt Injection&#xff09;攻击者通过设计特定输入&#xff0c;使模型生成恶意或不安全的输出。- …

基于Ambari搭建hadoop生态圈+Centos7安装教程V2.0优化版(本篇博客写的较为详细,可能比较多,请耐心看)

当我们学习搭建hadoop的时候&#xff0c;未免也会遇见很多繁琐的事情&#xff0c;比如很多错误&#xff0c;需要解决。在以后公司&#xff0c;也不可能让你一个一个搭建hadoop&#xff0c;成千上万的电脑&#xff0c;你再一个个搭建&#xff0c;一个个报错&#xff0c;而且每台…

宿舍管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 宿舍管理系统拥有三个角色&#xff0c;分别为系统管理员、宿舍管理员以及学生。其功能如下&#xff1a; 管理员&#xff1a;宿舍管理员管理、学生管理、宿舍楼管理、缺勤记录管理、个人密…

Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】

Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】 目录 Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】 一、简单介绍 二、单例模式 (Singleton Pattern) 1、什么时候使用单例模式 2、单例模式的好处 3、使用单例模式的…