MyString类


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

class MyString
{
public:
	MyString();
	MyString(const char* const p);
	MyString(const MyString & s);
	~MyString();
	MyString& operator = (const MyString &s);
	MyString& operator = (const char * p);
	MyString& operator + (const MyString &s);
	MyString& operator +=(const MyString &s);
	char &operator [](const int i);
	friend ostream& operator <<(ostream & out, const MyString& s);
	const char* getstring() const;
	int length() const;
	int size() const;

private:
	char *str;
	int len;
};

MyString::MyString()
{
	str = new char[1];
	str[0] = '\0';
	len = 0;
}

MyString::MyString(const char* const p)
{
	if (p != NULL) {
		len = strlen(p);
		str = new char[len + 1];
		strcpy(str, p);
	}
	else {
		MyString();
	}
}

MyString::MyString(const MyString &s) {

	len = s.length();
	str = new char[len + 1];
	strcpy(str, s.str);
}

MyString::~MyString()
{
	delete[] str;
	len = 0;
}

int MyString::length() const
{
	return len;
}
int MyString::size() const
{
	return len;
}

MyString& MyString::operator = (const MyString &s) {

	if (&s == this) {
		return *this;
	}
	delete[] str;
	len = s.length();
	str = new char[len + 1];
	strcpy(str, s.str);
	return *this;
}

MyString& MyString::operator = (const char * p) {

	delete[] str;
	len = strlen(p);
	str = new char[len + 1];
	strcpy(str, p);
	return *this;
}

char &MyString::operator [](const int i) {
	if (i >= len) {
		cout << "warning" << endl;
		return str[len - 1];
	}
	return str[i];
}

const char* MyString::getstring() const {
	return str;
}

ostream & operator <<(ostream & out, const MyString& s) {

	out << s.getstring();
	return out;
}

MyString& MyString::operator +(const MyString &s) {
	char *temp = str;
	int len = strlen(temp) + strlen(s.str);
	str = new char[len + 1];
	strcpy(str, temp);
	delete[] temp;
	strcat(str, s.str);
	return *this;
}

MyString& MyString::operator +=(const MyString &s) {
	char *temp = str;
	int len = strlen(temp) + strlen(s.str);
	str = new char[len + 1];
	strcpy(str, temp);
	delete[] temp;
	strcat(str, s.str);
	return *this;
}


int main() {

	MyString str1 = MyString("hello ");
	MyString str2 = "world";
	str1 += str2;
	cout << str1;
	system("pause");
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值