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

类中的特殊内容

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

#include <iostream>
#include <string.h>
using namespace std;class My_string
{
private:int len;int size;char *ptr;
public:My_string():size(15),len(0){ptr=new char[size];ptr[0]='\0';}My_string(const char *src){len = strlen(src);ptr = new char[len+1];strcpy(ptr,src);}My_string(const My_string& other):ptr(new char[this->len]),len(other.len){len = other.len;size = other.size;ptr = new char[size];strcpy(ptr,other.ptr);}//拷贝赋值My_string& operator=(const My_string& other){if(this!=&other){delete[]ptr;len = other.len;size = other.size;ptr = new char[size];strcpy(ptr,other.ptr);}return *this;}//析构函数~My_string(){delete[]ptr;}//判空bool empty(){return this->len==0;}//尾插void push_back(char x){if(this->len==this->size-1){return ;}this->ptr[len++]=x;}//尾删void dele_back(){if(this->len==0){return ;}this->ptr[len-1]=this->ptr[len];this->len--;}//at函数实现char &at(int x){if(x>=0&&x<size){return ptr[x];}else{cout<<"超出范围"<<endl;exit(1);}}//清空函数void dele_empty(){for(int i=0;i<this->len;i++){dele_back();}}//返回C风格字符串char *my_ptr(){return this->ptr;}//返回实际长度int my_len(){return this->len;}//返回当前最大容量int my_size(){return this->size;}//二倍扩容void doubledilatation(){//char *ptr1=new char[size];//*ptr1=*this->ptr;// if(this->len==this->size)// {//      this->size*=2;// }// cout <<" len="<<len<<"   size="<<size<<endl;size *= 2;char *new_ptr = new char[size];strcpy(new_ptr, ptr);delete[] ptr;ptr = new_ptr;}void show(){cout <<"len="<<len<<"    size="<<size<<"   ptr="<<ptr<<endl;}
};int main()
{My_string s1;My_string s2("lili");My_string s3("lililyq");My_string s4(s2);My_string s5(s2);s2.push_back('y');s2.show();s2.dele_back();s2.show();cout<<"第一个字符:"<<s2.at(2)<<endl;cout<<s2.my_ptr()<<endl;cout<<s2.my_len()<<endl;cout<<s2.my_size()<<endl;//while(1)// {//    s2.doubledilatation();//}return 0;
}

http://www.lryc.cn/news/444779.html

相关文章:

  • network request to https://registry.npmjs.org/xxx failed, reason: connect ETIM
  • MQ入门(二):java客户端SpringAMQP
  • 软技能与AI技术的融合
  • 在视频上绘制区域:使用Vue和JavaScript实现交互式画布
  • 31. RabbitMQ顺序消费
  • BERT-BiLSTM-CRF模型实战
  • npm 安装 与 切换 淘宝镜像
  • 在Windows系统上安装的 Arrow C++ 库
  • 格雷母线电缆头安装方法视频-武汉正向科技
  • 统信服务器操作系统【Cron定时任务服务】
  • 微前端中的路由加载流程
  • Axure大屏可视化模板:跨领域数据分析平台原型案例
  • 机器学习(1)——线性回归、线性分类与梯度下降
  • 完整的端到端的中文聊天机器人
  • 【有啥问啥】Stackelberg博弈方法:概念、原理及其在AI中的应用
  • 【UI自动化】前言
  • Unity对象池的高级写法 (Plus优化版)
  • vue3<script setup>中computed
  • 【已解决】使用JAVA语言实现递归调用-本关任务:用循环和递归算法求 n(小于 10 的正整数) 的阶乘 n!。
  • BiRefNet 教程:基于 PyTorch 实现的双向精细化网络
  • Oracle 数据库安装和配置指南(新)
  • JavaScript的注释与常见输出方式
  • 深入探索Android开发之Java核心技术学习大全
  • vue3 选择字体的颜色,使用vue3-colorpicker来选择颜色
  • windows C++ 并行编程-使用消息块筛选器
  • 【mysql技术内幕】
  • 快递物流单号识别API接口DEMO下载
  • Jetpack——Room
  • Dynamic Connected Networks for Chinese Spelling Check(ACL2021)
  • 前端vue-3种生命周期,只能在各自的领域使用