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

9.23 My_string.cpp

在这里插入图片描述

my_string.h

#ifndef MY_STRING_H
#define MY_STRING_H#include <iostream>
#include <cstring>using namespace std;class My_string
{
private:char *ptr;         //指向字符数组的指针int size;           //字符串的最大容量int len;            //字符串当前容量public://无参构造My_string():size(20){cout<<"****************无参构造***********"<<endl;this->ptr = new char[size];this->ptr[0] = '\0';            //表示串为空串this->len = 0;}//有参构造My_string(const char* src){cout<<"****************一个参数有参构造***********"<<endl;this->len = strlen(src);this->size = len + 1;this->ptr = new char[size];strcpy(this->ptr,src);}My_string(int num,char value){cout<<"****************两个参数有参构造***********"<<endl;this->len = num;this->size = len + 1;this->ptr = new char[len+1];int i=0;while(i<num){this->ptr[i]=value;i++;}this->ptr[num]='\0';}//拷贝构造My_string (const My_string &other){cout<<"****************拷贝构造***********"<<endl;len = other.len;size = other.size;ptr = new char[size];strcpy(ptr, other.ptr);}//拷贝赋值My_string &operator=(const My_string &other){cout<<"****************拷贝赋值***********"<<endl;if (this == &other) {return *this;  // 直接返回当前对象}delete[] ptr;this->len = other.len;this->size = other.size;this->ptr = new char[size];strcpy(ptr, other.ptr);return *this;}//析构函数~My_string(){cout<<"****************析构函数***********"<<endl;delete []this->ptr;}//显示内容void show();//判空void isempty();//判满void isfull();//尾插void push_back(char value);//尾删void pop_back();//at函数实现char &at(int index);//清空函数void clear();//返回C风格字符串char* data();//返回实际长度int get_length();//返回当前最大容量int get_size();//君子函数:二倍扩容void resize();};#endif // MY_STRING_H

my_string.cpp

#include "my_string.h"
#include <cstring>
void My_string::show(){cout<<ptr<<endl;
}
//判空
void My_string::isempty(){if(this->len==0){cout<<"字符串为空"<<endl;}return;
}
//判满
void My_string::isfull(){if(this->len>=this->size){cout<<"字符串满"<<endl;resize();cout<<"重新分配空间"<<endl;}else{cout<<"字符串未满"<<endl;}return;
}//尾插
void My_string::push_back(char value){this->isfull();this->ptr[len]=value;len++;ptr[len]='\0';
}//尾删
void My_string::pop_back(){this->len=this->len-1;ptr[len]='\0';
}
//at函数实现
char & My_string::at(int index){return ptr[index];
}
//清空函数
void My_string::clear(){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;
}//君子函数:二倍扩容
void My_string::resize() {size *= 2;char* new_ptr = new char[size];strcpy(new_ptr, ptr);delete[] ptr;ptr = new_ptr;}

main.cpp

#include "my_string.h"int main(){My_string p1;My_string p2("hello");p2.show();My_string p3(5,'A');p3.show();My_string p4 = p2;p4.show();p3=p2;p3.show();p2.show();cout<<"p2的第3个字符"<<p2.at(3)<<endl;cout<<"p2C风格的字符串"<<p2.data()<<endl;p2.isfull();cout<<"p2的最大长度:"<<p2.get_size()<<endl;cout<<"p2现在的长度:"<<p2.get_length()<<endl;p2.clear();p2.show();p2.push_back('W');p2.show();p2.pop_back();p2.show();}

http://www.mrgr.cn/news/34441.html

相关文章:

  • Spring框架之策略模式 (Strategy Pattern)
  • 学习threejs,使用第一视角控制器FirstPersonControls控制相机
  • SQL的基本CRUD操作
  • 如何保证RabbitMQ的可靠性传输
  • ⚡️如何在 React 和 Next.js 项目里优雅的使用 Zustand
  • Python从0到100(七十二):Python OpenCV-OpenCV实现手势音量控制(文末送书)
  • 预计2030年全球GO电工钢市场规模将达到120.6亿美元
  • Qt-qmake概述
  • 浅拷贝和深拷贝
  • C++笔记---set和map
  • Python狭长型图斑检测
  • 知名模型/产品统计
  • Ethernet 系列(3)-- 物理层测试::IOP Test::Cable diagnostics
  • 【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第二篇-着色器制作】
  • 塑料瓶回收标志分级检测系统源码分享
  • 解决Echarts:宽度100%,渲染的宽度却是100px
  • (c++)结构体数组的创建和元素访问(指针访问和.访问)
  • 抖音矩阵系统源码搭建短视频批量剪辑矩阵分发,可开源或oem
  • 圈子系统源码搭建,圈子系统安卓证书、包名和签名-苹果开发者账号、证书如何获取
  • fo-dicom开发之DICOM数据解析:常见数据类型及处理方法详解
  • 【计算机网络】传输层协议TCP
  • 好用的idea方法分隔符插件
  • 计算机网络发展
  • 【AI创作组】MATLAB基础语法总结
  • C# 中yield 的使用详解
  • 【基础知识】网络套接字编程