当前位置:   article > 正文

string类及其简单模拟实现_hstring项目

hstring项目

一.string类
1.string是表示字符串的类。该类的接口与常规容器基本相同,再添加了一些专门用来操作字符串的操作。
二.string类常见的对象构造
1.string():构造空的字符串。
2.string(const char *s):用c-string来构造string类对象
3.string (const string &s):拷贝构造函数
三.string类常用操作
1.s+t:将串s和t拼接为一个新串
2.s=t:用t更新s
3.s==t:判断s和t是否相等
4.s!=t:判断s和t是否不等
6.s[i]:访问下标为i的字符
四.输入整行字符串
1.getline可以输入整行字符串(需包含string头文件)
如:getline(cin,s2)
2.getline可以有第三个参数,用来做字符串的结束标志符。
五.string类对象常用的容量操作
1.size:返回数组的长度
2.empty:检测字符串释放为空串,是返回true,否返回false
3.clear:清空有效字符
4.reserve:为字符串预留空间
5.resize:将有效字符的个数改为n个,多出来的用字符c填充
六.浅层复制与深层复制
1.浅层复制:实现对象间元素的一一对应的复制。
在这里插入图片描述
浅层复制相当于把数组1的指针的内容和size的值原样搬到数组2,同时数组1和数组二的指针指向同一片地址即同一个数组单元,其数组元素本身没有被复制,只是把地址复制了。所以在析构数组1时已经把这片内存单元释放了,在析构数组2时又会delete一遍,就会发生出错。
2.深层复制:当被复制的对象为指针类型时,不是复制该指针成员本身,而是将指针所指的元素进行复制
在这里插入图片描述
这里将数组一的size复制到了数组2,但points没有复制。数组2的points指向了新开辟了一片空间,然后将数组一的元素复制到数组2.
七.string类的简单模拟实现(构造函数,拷贝构造函数,赋值运算符重载,析构)

class string
{
public:
	string(const char *str = "")//:构造函数
	{
		if (str == nullptr)
		{
			str = "";
		}
		Str = new char[strlen(str) + 1];
		strcpy(Str,str);
	}
	void swap(char *a, char* b)
	{
		char s;
		s = *a;
		*a = *b;
		*b = s;
	}
	//:拷贝构造函数
	string::string(const string &s)
		:Str(new char[strlen(s.Str) + 1])
	{
		strcpy(Str, s.Str);
	}
	//:赋值运算符重载
	string& operator=(const string& s)
	{
		swap(Str, s.Str);
		return *this;
	}
	//:析构
	~string()
	{
		if (Str)
		{
			delete[] Str;
			Str = nullptr;
		}
	}
private:
	char* Str;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/490447
推荐阅读
相关标签
  

闽ICP备14008679号