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

2024.9.2

还没写完 

#include <iostream>
#include <cstring>
using namespace std;class myString
{
private:char *str;          //字符串int size;           //实际字符长度int len;            //字符串容量
public:myString():size(10)     //无参构造函数{len = size + 1;str = new char[size];}myString(const char*s):size(strlen(s))      //有参构造函数{//cout<<size<<endl;len = size + 1;str = new char[size+1];strcpy(str,s);}~myString()         //析构函数{delete []str;}myString &operator=(const myString &R);     //=重载char &at(const int &index);                 //atchar &operator[](const int &index);         //下标重载char *data();       //datachar *c_str();      //c_strbool empty();       //判空int sszie();        //字符实际长度int capcity();      //字符串容量void clear();       //清空void push_back(const char &s);   //尾插1个字符void pop_back();    //尾删1个字符void expand();      //二倍扩容myString &operator+=(const myString &R); //+=重载myString &operator+(const myString &R);myString &operator+(const char &R);void show();        //展示
};
//=
myString & myString:: operator=(const myString &R)
{/*delete [] str;size = R.size;len = R.len;char *newstr = new char[len];strcpy(newstr,R.str);str = newstr;*/size = R.size;len = R.len;char *newstr = new char[len];strcpy(newstr,R.str);delete [] str;str = newstr;return *this;
}
//at
char &myString :: at(const int &index)
{if(index > size || index < 0)       //判断是否下标越界{cout<<"下标越界"<<endl;exit(0);}return str[index];
}//[]
char &myString::operator[](const int &index)
{return str[index];
}
//data
char *myString ::data()
{return &str[0];
}
//c_str
char *myString :: c_str()
{return str;
}
//empty
bool myString::empty()
{return size==0;
}
//ssize
int myString::sszie()
{return size;
}
//capcity
int myString::capcity()
{return len;
}
//clear
void myString::clear()
{
//    delete [] str;
//    str = new char[size+1];memset(str,0,size+1);
}
//show
void myString ::show()
{
//    cout<<size<<endl;
//    cout<<strlen(str)<<endl;cout<<str<<endl;
}
//尾插
void myString::push_back(const char &s)
{if((size + 1) >= len)       //判断是否需要二倍扩容{expand();}str[size] = s;size++;str[size] = '\0';
}
//尾删一个字符
void myString::pop_back()
{str[size-1] = 0;size--;
}
//+=
myString & myString::operator+=(const myString &R)
{while(size + int(strlen(R.str)) >= len){expand();}strcat(this->str,R.str);return *this;
}
//二倍扩容
void myString::expand()
{len = len * 2 - 1;char*newstr = new char[len];memset(newstr,0,len);strcpy(newstr,str);delete []str;str = newstr;
}
//+
myString &myString::operator+(const myString &R)        //两个字符串相加
{while((size + R.size) >= len){expand();}strcat(str,R.str);size = size + R.size;return *this;
}
myString &myString::operator+(const char &R)        //字符串和单个字符相加
{if(size + 1 >= len){expand();}push_back(R);return *this;
}
int main()
{myString s1("nihao");myString s2("hello world");s1 = s2;s1.show();cout<<s1.at(1)<<endl;s1[0] = 'H';s1.show();s1.push_back('!');s1.show();s1.pop_back();s1.show();myString s3;s3 = s1 + s2 + s2;s3.show();cout<<"**************"<<endl;s3 = s3 + '?' + '!';s3.show();s1.clear();s1.show();s1.at(-1);return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 中国剩余定理和扩展中国剩余定理(模板)
  • 深度学习(七)-计算机视觉基础
  • Redis从简单使用到底层原理与分布式缓存
  • 【C++ Primer Plus习题】10.7
  • react中关于token的两个场景
  • 从零到精通:用C++ STL string优化代码
  • Biome-BGC生态系统模型与Python融合技术实践应用
  • 记一次 OOM内存溢出案例
  • 设计模式-行为型模式-模板方法模式
  • 预训练语言模型的前世今生 - 从Word Embedding到BERT
  • 深入掌握Linux磁盘管理,从入门到精通的完整指南
  • 安装node版本管理工具(nvm)、利用nvm安装node
  • html+css+js网页设计 故宫7个页面 ui还原度100%
  • 解决App推广痛点:一键获取下载数据的秘诀
  • Vue(七) TodoList案例1.0
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • mongo索引构建
  • Node 版本管理
  • Redis学习笔记 - pipline(流水线、管道)
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 浮现式设计
  • 盘点那些不知名却常用的 Git 操作
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #### go map 底层结构 ####
  • #define,static,const,三种常量的区别
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • %@ page import=%的用法
  • (33)STM32——485实验笔记
  • (day18) leetcode 204.计数质数
  • (汇总)os模块以及shutil模块对文件的操作
  • (六)Flink 窗口计算
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十六)Flask之蓝图
  • (转)Sublime Text3配置Lua运行环境
  • (转)菜鸟学数据库(三)——存储过程
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ****三次握手和四次挥手
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .“空心村”成因分析及解决对策122344
  • .NET CLR Hosting 简介
  • .Net mvc总结
  • .Net 应用中使用dot trace进行性能诊断
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net程序帮助文档制作
  • .net开发日常笔记(持续更新)
  • .NET性能优化(文摘)
  • /*在DataTable中更新、删除数据*/
  • /proc/vmstat 详解
  • @javax.ws.rs Webservice注解
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解