C++实现string类

利用深拷贝和深赋值实现实现string类的接口
在win64 VS2019环境 使用 strcpy函数,报错----使用宏
#define _CRT_SECURE_NO_WARNINGS 避免简单测试时报错

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class Mystring
{
public:
	Mystring(const char* str = nullptr);
	~Mystring();
	Mystring(const Mystring& s);
	bool operator==(const Mystring& s);
	Mystring& operator=(const Mystring& s);
	Mystring operator+(const Mystring& s)const;
	Mystring& operator+=(const Mystring& s);
	inline size_t size()const;
	const char* c_str() const;//将string转为char
private:
	char* _str;
	size_t _size;
};
Mystring::Mystring(const char* str) {
	if (str == nullptr) {
		_size = 0;
		_str = new char[1];
		*_str = '\0';
	}
	else {
		int len = strlen(str);
		_str = new char[len+1];
		strcpy(_str, str); // 会拷贝 源字符串最后的 \0
	}
}
Mystring::~Mystring() {
	_size = 0;
	delete[] _str;
}
Mystring::Mystring(const Mystring& s) {
	_size = s.size();
	_str = new char[_size + 1];
	strcpy(_str, s.c_str());
}

bool Mystring::operator==(const Mystring& s) {
	if (_size == s.size() && strcmp(_str, s.c_str()) == 0)
		return true;
	return false;
}
Mystring& Mystring::operator=(const Mystring& s) {
	if (*this == s)
		return *this;
	delete[]_str;
	_size = s.size();
	_str = new char[s.size() + 1];
	strcpy(_str, s.c_str());
}
Mystring Mystring::operator+(const Mystring& str) const//+操作符3步
{//新建对象包括新空间,拷贝两个数据,返回新空间
	Mystring newstring;
	newstring._size = _size + str.size();
	newstring._str = new char[newstring._size + 1];
	strcpy(newstring._str, _str);
	strcat(newstring._str, str.c_str());
	return newstring;
}

Mystring& Mystring::operator+=(const Mystring& str)//+=操作符5步
{//重分配新空间,拷贝两个数据,删除自己原空间,赋值为新空间,返回引用
	_size += str.size();//成员_size是实际长度
	char* newstring = new char[_size + 1];
	strcpy(newstring, _str);
	strcat(newstring, str.c_str());
	delete[] _str;
	_str = newstring;
	return *this;
}
inline size_t Mystring::size()const {
	return _size;
}
inline const char* Mystring::c_str()const {
	return _str;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值