c++第二次作业(2024.9.3)

在昨天的基础上增加:

#include <iostream>
#include <cstring>

using namespace std;

class Mystring{
	private:
		int len;
		char* str;

	public:
		//无参构造函数
		Mystring(){
			len = 0;
			str = nullptr;
		}
		//有参构造函数
		Mystring(const char* s){
			len = strlen(s);
			str = new char[len+1];
			strcpy(str,s);
		}
		//拷贝构造函数
		Mystring(Mystring &s):len(s.len),str(new char[s.len+1])
		{
//			len = s.len;
//			//str = s.str;
//			new char[len+1];
			strcpy(str,s.str);
		}
		//拷贝赋值函数
		Mystring& operator=(const Mystring &s){
			if(&s == this)
				return *this;
			len = s.len;
			if(nullptr != str)
				delete []str;
			str = new char[s.len+1];
			strcpy(str,s.str);
			return *this;
		}
		//析构函数
		~Mystring(){
			cout<<&str<<"析构函数\n";
			if(nullptr != str)
				delete []str;
			str = nullptr;
		}
		//c_str()
		char* myc_str(){
			return this->str;
		}
		//length()
		int mylength(){
			return this->len;
		}
		//empty()
		bool myempty(){
			cout<<"判空\n";
			if(len == 0){
				return 1;
			}
			return 0;
		}
		//at()
		char& myat(int x){
			if(x>=len || x<0)
				throw "数组下标越界!\n";
			return str[x];
		}
		Mystring& operator+(const Mystring &s){
			len += s.len;
			if(s.str!=nullptr){
				char *p = new char[len+1];
				bzero(p,len+1);
				if(str != nullptr){
					strcpy(p,str);
					delete []str;
				}
				str = new char[len+1];
				strcpy(str,p);
				strcat(str,s.str);
				delete []p;
			}
			return *this;
		}
		const bool operator!=(const Mystring &s){
			if(str == nullptr&& s.str == nullptr)
				return 0;
			if(str!=nullptr&&s.str!=nullptr){
				if(strcmp(str,s.str))
					return 1;
				return 0;
			}
			return 1;
		}
		const bool operator==(const Mystring &s){
			if(str == nullptr&& s.str == nullptr)
				return 1;
			if(str!=nullptr&&s.str!=nullptr){
				if(strcmp(str,s.str))
					return 0;
				return 1;
			}
			return 0;
		}

		const bool operator<(const Mystring &s){
			if(s.str != nullptr){
				if(str == nullptr)
					return 1;
				else if(strcmp(str,s.str)<0)
					return 1;
			}
			return 0;
		}

		const bool operator<=(const Mystring &s){
			if(str != nullptr){
				if(s.str == nullptr)
					return 0;
				else if(strcmp(str,s.str)>0)
					return 0;
			}
			return 1;
		}

		const bool operator>(const Mystring &s){
			if(str != nullptr){
				if(s.str==nullptr)
					return 1;
				else if(strcmp(str,s.str)>0)
					return 1;
			}
			return 0;
		}

		const bool operator>=(const Mystring &s){
			if(s.str != nullptr){
				if(str == nullptr)
					return 0;
				else
					if(strcmp(str,s.str)<0)
						return 0;
				}
			return 1;
		}

		//friend  <<   >>
		friend ostream& operator<<(ostream &O,const Mystring &s);
		friend istream& operator>>(istream &I,Mystring &s);

};

ostream& operator<<(ostream &O,const Mystring &s){
	if(s.str != nullptr)
		O<<"str = "<<s.str;
	else
		O<<"str = nullptr";
	return O;
}

istream& operator>>(istream &I,Mystring &s){
	cout<<"请输入一串字符!"<<endl;
	I>>s.str;
	s.len = strlen(s.str);
	return I;
}


int main(int argc, const char *argv[])
{
	Mystring str0;
//	cout<<str0.myempty()<<endl;
	Mystring str1("12345");
	str0 = str1;
//	cout<<"str1="<<str1.myc_str()<<"\nlen="<<str1.mylength()<<endl;
//	cout<<"str0="<<str0.myc_str()<<"\nlen="<<str0.mylength()<<endl;
	str0.myat(3) = 'h';
//	cout<<"str0="<<str0.myc_str()<<"\nlen="<<str0.mylength()<<endl;
//	try{
//		str0.myat(10) = 'j';
//	}catch(const char* err){
//		cerr<<err;
//		//cout<<str0.myc_str()<<endl;
//	}
	Mystring str2 = str0+str1;
	cout<<str2<<endl;
	bool a = str0>str1,b=str0>=str0;
	cout<<"a="<<a<<"b="<<b<<endl;
	cin>>str0;
	a = str0>str1;
	b=str0>=str0;
	cout<<"a="<<a<<"b="<<b<<endl;

	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值