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

C++自写string类

文章目录

  • private成员变量如下
  • public中的主要成员函数
    • 全缺省构造函数
    • 拷贝构造函数
    • operator=()函数
    • 析构函数
  • public中非主要成员函数(string类的函数)
    • c_str()
    • clear()
    • size()
    • capacity()
  • string常用函数实现
    • reserve(n)

private成员变量如下

  1.string类中可以看成由char类型的字符一个一个拼接而成,此处定义成员变量char* _str。
  2.需要知道存储的字符长度,定义成员变量 _size。
  3.字符串总的存储容量(不包括\0),定义成员变量 _capacity。
  4.npos在下面文章中进行介绍。

class string {
public:
private:char* _str = nullptr;size_t _size = 0;size_t _capacity = 0;//声明定义要分离static const size_t npos;
};

public中的主要成员函数

全缺省构造函数

  1.在c语言提供的库函数中,使用strlen()计算此时字符串的长度。
  2.将容量赋值为字符串长度。
  3.new一个比capacity容量加一的字符串(此处的+1,是为了存储\0)。
  4.使用库函数strcpy()进行拷贝,将str拷贝到_str中。

string(const char* str = "") {_size = strlen(str);//_capacity中不包括‘\0’_capacity = _size;// +1存储‘\0’_str = new char[_capacity + 1];strcpy(_str, str);
}

拷贝构造函数

法一:
  1.给与_str同样的容量。
  2.使用c语言的库函数strcpy()进行拷贝。

//s2(s1)
string(const string& str) {_str = new char[str._capacity + 1];strcpy(_str, str._str);_size = str._size;_capacity = str._capacity;
}

法二:
  1.创建一个临时变量tmp,用于存储str的值。
  2.将_str和tmp的数据进行交换,本质上是将tmp的数据给到_str中。

string(const string& str) {string tmp(str._str);swap(_str, tmp._str);swap(_size, tmp._size);swap(_capacity, tmp._capacity);
}

operator=()函数

  1.在赋值操作中,要释放s2的数据。(如果此时s1赋值给s1,这种思路就会使s1变为空,将空有赋值给了s1,使s1的值发生了变化,所以在赋值前要进行判断,防止自己给自己赋值)(这是重点)。
  2.将_str的容量开辟为s1的容量加1,此时的加1,是为了存储 \0
  3.使用strcpy()函数,将s2的字符串数据赋值给s1的字符串数据。
  4.将s1的字符串长度和容量都赋值给s2的字符串长度和容量。
  5.返回的要是this指针。(返回指针可以确保多次赋值)

//s2 = s1
string& operator=(const string& s) {//防止自己给自己赋值if (this != &s) {delete[] _str;_str = new char[s._capacity + 1];strcpy(_str, s._str);_size = s._size;_capacity = s._capacity;	}return *this;
}

析构函数

  将成员函数的值,全部清空。

~string() {delete[] _str;_str = nullptr;_size = 0;_capacity = 0;
}

public中非主要成员函数(string类的函数)

c_str()

  返回字符串的数据。

const char* c_str() const {return _str;
}

clear()

  不清空间,只清数据,字符串的容量不变。

void clear() {//不清空间,清数据_str[0] = '\0';_size = 0;
}

size()

  返回字符串的长度。

size_t size() const {return _size;
}

capacity()

  返回字符串的容量。

size_t capacity() const {return _capacity;
}

string常用函数实现

reserve(n)

  扩容函数,使字符串的长度为 capacity = n。
  ;1.只有当n大于字符串的容量的时候才进行扩容。
  2.此时要开辟的临时变量要为n+1,此时的加1,是为了存储 \0
  3.使用库函数strcpy(),将原有的数据拷贝到临时变量tmp中。
  4.释放原有_str的数据。
  5.将临时变量的数据tmp给到_str.。这里默认调用了operator=函数。

void string::reserve(size_t n) {if (n > _capacity) {// +1存储‘\0’char* tmp = new char[n + 1];strcpy(tmp, _str);delete[] _str;_str = tmp;_capacity = n;}
}

觉得我回答有用的话,记得点个关注哟!谢谢支持!

http://www.dtcms.com/a/428226.html

相关文章:

  • ps个人网站首页怎么制作网络营销的八种方法
  • 如何选择企业网站开发商贸有限公司英文
  • 901-012_高级系统架构设计师-考试范围-标准化知识产权数学模型汇总
  • 网站关键词搜索老酒街wordpress
  • Qwen-Image:开源图像生成新突破 —— 聚焦复杂文本渲染与精准图像编辑
  • 深圳自己做网站网站app开发一站式服务
  • 档案管理系统如何对企业效率重构与提升?
  • 中国移动网站建设番禺区手机版网站建设
  • 老庙出海 以东方好运文化讲好中国故事
  • 有关网站开发的参考文献怎么自己制作app
  • 【Linux指南】Linux调试利器gdb入门:从编译到基础命令实战
  • 住房建设网站用什么技术来做网站
  • 如何对接API接口?需要用到哪些软件工具?
  • App防止恶意截屏功能的方法:iOS、Android和鸿蒙系统的实现方案
  • 做阅读理解的网站兰州专业做网站的公司有哪些
  • windows输入法中英切换(英文提示)ALT + SHIFT切换(搜狗输入法CTRL+SHIFT+E切换)英文键盘
  • 国外支付对接流程记录
  • SRE角度的LSTM学习
  • 外贸网站案例wapcms建站系统
  • 网站服务器失去响应怎么解决wordpress 百度分享
  • 【鬼灭之刃无限城篇4k高清版】免费分享
  • Java8 Function、Consumer、Supplier
  • 网站美化模板长治做网站哪家好
  • UVa11211 Digital Logic
  • 在门户网站做产品seowordpress 上传中文文件名
  • 营销网站建站开发整站seo策略实施
  • Day04_总线驱动
  • 成都市成华区建设局官方网站wordpress啦去
  • 901-008_高级系统架构设计师-考试范围-系统质量属性与架构评估
  • 重庆做网站seo优化选哪家好php数据库的网站模板