c++ string (operator改写)

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

class Mystring
{
	public:
		Mystring()
		{                   //无参构造函数
			len = 0;
			str = nullptr;	
		}     

		Mystring(const char* p)       //有参构造函数
		{
			len = strlen(p);
			str = new char[len+1];
			strcpy(str,p);
		//	cout<<"有参构造函数"<<endl;
		//	cout<<str<<endl;
		}

		//拷贝构造函数
		Mystring(Mystring &other):len(other.len),str(new char[other.len])
	{

		strcpy(str,other.str);
	}

		//拷贝赋值函数
		Mystring& operator = (const Mystring& other)
		{
			if(&other != this)
			{
				len = other.len;
				if(nullptr == str)
				{
					str = new char[len+1];
				}
				delete []str;
				str = new char[len+1];
				str = other.str;
			}

			return *this;
		}

		~Mystring(){                     //析构函数
			if( nullptr != str)
			{
				delete []str;
			}
		}  

		//data
		char* data()
		{
			return str;
			
		}
	
		//size
		int size()
		{
			return len;
		}

		//empty
		bool empty()
		{
			return len==0;
		}

		//at
		char& at(int index)
		{
			if(index<0 || index>len)
			{
				cout<<index<<"不合法"<<endl;
				return str[0];
			}
			return str[index];
		}

		Mystring& operator+(const Mystring& R)
		{
			strcat(str,R.str);
			return *this;
		}

		 const bool operator!=( Mystring& R)
		{
			return strcmp(str,R.str)!=0;
		}


		 const bool operator==( Mystring& R)
		 {
			 return strcmp(str,R.str)==0;
		 }

		 const bool operator<( Mystring& R)
		 {
			 return strcmp(str,R.str)<0;
		 }

		 const bool operator<=( Mystring& R)
		 {
			 return strcmp(str,R.str)<=0;

		 }


		 const bool operator>( Mystring& R)
		 {
			 return strcmp(str,R.str)>0;

		 }

		 const bool operator>=( Mystring& R)
		 {
			 return strcmp(str,R.str)>=0;

		 }

		friend ostream& operator<<(ostream& L,const Mystring& R);

		friend istream& operator>>(istream& L, Mystring& R);
	private:
		int len;
		char * str;

};

ostream& operator<<(ostream& L,const Mystring& R)
{
	Mystring s;
	
	s.str= new char[(R.len)+1];

	L<<strcpy(s.str,R.str)<<endl;
	return L;
}

istream& operator>>(istream& L, Mystring& R)
{
	
	cout<<"输入字符串>>>"<<endl;

	R.str = new char[(R.len)+1];
	L>>R.str;
	return L;
}



int main(int argc, const char *argv[])
{
	Mystring s1,s4,s5;

	cin>>s1>>s4;
	cout<<s1<<s4;

	s5 = s1+s4;
	cout<<s5;

	bool ret1 = s1==s4;
	cout<<ret1<<endl;



	bool ret2 = s1<s4;
	cout<<ret2<<endl;

	bool ret3 = s1<=s4;
	cout<<ret3<<endl;

	bool ret4 = s1>s4;
	cout<<ret4<<endl;

	bool ret5 = s1>=s4;
	cout<<ret5<<endl;

	bool ret6 = s1!=s4;
	cout<<ret6<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值