说到底,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;
}