数据结构之String实现

说到底,string类实际上就是对字符串指针进行一系列的操作

两个重点:

1.接口记得写哪一些

2.  c函数的使用

strcpy(newString.m_data, m_data);
strcat(newString.m_data, other.m_data);

 

class MyString {
public:
	MyString(const char* str = NULL); // 普通构造函数
	MyString(const MyString& other); //拷贝构造函数
	~MyString();//析构函数
	MyString& operator= (const MyString& other);
	MyString& operator+(const MyString& other);
	bool operator==(const MyString& other);
	int getLength();
private:
	char* ptr;
};

 

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;

class MyString {
public:
	MyString(const char* str = NULL); // 普通构造函数
	MyString(const MyString& other); //拷贝构造函数
	~MyString();//析构函数
	MyString& operator= (const MyString& other);
	MyString& operator+(const MyString& other);
	bool operator==(const MyString& other);
	int getLength();
public:
	char* m_data;
};
MyString::MyString(const char* str) {
	if (str == NULL) {
		m_data = new char[1];
		*m_data = '\0';
	}
	else {
		int size = strlen(str);
		m_data = new char[size + 1];
		strcpy(m_data, str);
	}
}
MyString::~MyString() {
	if (m_data) {
		delete m_data;
		m_data = 0;
	}
}
MyString::MyString(const MyString& other) {
	if (!other.m_data) {
		m_data = 0;
	}
	m_data = new char[strlen(other.m_data) + 1];//有时候我会想m_data不是private吗?应该不能取吧,
	strcpy(m_data, other.m_data);
}
MyString& MyString::operator=(const MyString& other) {
	if (this != &other) {
		delete m_data;
		if (!other.m_data) {
			m_data = 0;
		}
		else {
			m_data = new char[strlen(other.m_data) + 1];
			strcpy(m_data, other.m_data);
		}
	}
	return *this;
}
MyString& MyString::operator+(const MyString& other) {
	//传入的参数内容为空、本身 内容为空或两者内容都不为空 。
	MyString newString;
	if (!other.m_data) {
		newString = *this;
	}
	else if (!m_data) {
		newString = other;
	}
	else {
		newString.m_data = new char[strlen(m_data) + strlen(other.m_data) + 1];
		strcpy(newString.m_data, m_data);
		strcat(newString.m_data, other.m_data);
	}
	return newString;
}
bool MyString::operator==(const MyString& other) {
	if (strlen(m_data) != strlen(other.m_data)) {
		return false;
	}
	else {
		return strcmp(m_data, other.m_data) ? false : true;
	}
}
int MyString::getLength() {
	return strlen(m_data);
}

int main() {
	MyString s("hello world");
	cout << s.m_data << endl;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值