#include<iostream>
#include<cstring>
using namespace std;

class String {
private:
	char* str;//字符数组
	size_t length;//字符数,不包含'\0'
public:
	String();//初始化
	String(const char* s);//字符串的赋值
	~String();//析构
	size_t getLength()const;//得到字符串长度
	char operator[](size_t index)const;//实现字符串的索引
	String& operator=(const String& s);//实现字符串的赋值
	bool operator==(const String& s)const;//字符串的等于
	bool operator!=(const String& s)const;//字符串的不等于
	String copy()const;//字符串的拷贝
	String operator+(const String& s)const;//字符串的拼接
	friend ostream& operator<<(ostream& out, const String& s);//
	String(const String& s);
};
String::String(const String& s) {
	length = s.length;
	str = new char[length + 1];
	strcpy(str, s.str);
}
String::String() {
	length = 0;
	str = new char[1];
	str[0] = '\0';
}

String::String(const char* s) {
	length = strlen(s);
	str = new char[length + 1];//加一个给'\0'
	strcpy(str, s);
}

String::~String() {
	delete[] str;
}

size_t String::getLength()const {
	return length;
}

char String::operator[](size_t index)const {
	return str[index];
}

String& String::operator=(const String& s) {
	if (this != &s) {
		delete[]str;//如果不相等,要先删除this原有的内存
		length = s.length;//cpoy长度
		str = new char[length + 1];//创建新的内存空间
		strcpy(str, s.str);//赋值
	}
	return *this;//返回this所指向的内容,也就是String
}

bool String::operator==(const String& s)const {
	return strcmp(str, s.str) == 0;
}

bool String::operator!=(const String& s)const {
	return strcmp(str, s.str) != 0;
}

String String::copy()const {
	String s = *this;
	return s;
}

String String::operator+(const String& s)const {
	String result;
	result.length = length + s.length;
	result.str = new char[result.length + 1];
	strcpy(result.str, str);
	strcat(result.str, s.str);
	return result;
}

ostream& operator<<(ostream& out, const String& s) {
	out << s.str;
	return out;
}

int main() {
	String s("12345d");
	cout << s << endl;
	cout << s + "445" << endl;
	cout << s[5] << endl;
	cout << (s == "12345d") << endl;
	cout<< (s != "12345d") << endl;
	s = s + "asd";
	cout << s << endl;
	String a, b, c;
	a = b = c = s;
	cout << a << b << c << s << endl;
	String x = s.copy();
	cout << x << endl;

}

更多推荐