运算符重载

设计一个字符串类String,通过运算符重载实现字符串的输入、输出以及+=、==、!=、<、>、>=、[ ]等运算
#include <iostream.h>
#include <string.h>
class String {
private:
int length;                     		//字符串长度
char *sPtr;                     		//存放字符串的指针
void setString( const char *s2);	
friend ostream &operator<<(ostream &os, const String &s); 
friend istream &operator>>(istream &is, String &s);  //重载输入运算符
public:
String( const char * = "" );            
~String();                            
	 	const String &operator=(const String &R); 		//重载赋值运算符 =
	 	const String &operator+=(const String &R);		//字符串的连接 +=
bool operator==(const String &R);				//字符串的相等比较 ==
bool operator!=(const String &R);				//字符串的不等比较 !=
bool operator!() ;               				//判定字符串是否为空
bool operator<(const String &R) const;     		//字符串的小于比较 <
bool operator>(const String &R);                	//字符串的大于比较 >
bool operator>=(const String &R);             	//字符串的大于等于比较
char &operator[](int);                         	//字符串的下标运算
};
const String &String::operator+=(const String &R) {
char *temp = sPtr;              
length += R.length;           
sPtr = new char[length+1]; 
strcpy(sPtr,temp );           
strcat(sPtr,R.sPtr );         
delete [] temp;                 
return *this;                         
}
bool String::operator==(const String &R){return strcmp(sPtr,R.sPtr)==0;}
bool String::operator!=(const String & R){return !(*this==R);}
bool String::operator!(){return length ==0;}
bool String::operator<(const String &R)const
{return strcmp(sPtr,R.sPtr)<0;}
bool String::operator>(const String &R){return R<*this;}
bool String::operator>=(const String &R){return !(*this<R);}
char &String::operator[](int subscript){return sPtr[subscript];}
ostream &operator<<(ostream &os,const String &s){
    os << s.sPtr;
    return os;   
}
istream &operator>>(istream &is,String &s) {
    char temp[100];                                 
    s=temp;                                           
    return is;                                       
}
int main(){
    String s1("happy"),s2("new year"),s3;
    cout << "s1 is " << s1 << "\ns2 is " << s2 << "\ns3 is " << s3       
<< "\n比较s2和s1:"
<< "\ns2 ==s1结果是 " << ( s2 == s1 ? "true" : "false")
<< "\ns2 != s1结果是 " << ( s2 != s1 ? "true" : "false")
<< "\ns2 >  s1结果是 " << ( s2 >  s1 ? "true" : "false") 
<< "\ns2 <  s1结果是 " << ( s2 <  s1 ? "true" : "false") 
<< "\ns2 >= s1结果是 " << ( s2 >= s1 ? "true" : "false");
cout << "\n\n测试s3是否为空: ";                         if (!s3){
cout << "s3是空串"<<endl;                           	//L3
cout<<"把s1赋给s3的结果是:";                    		       	
s3 = s1;                                         
       	cout << "s3=" << s3 << "\n";                          	//L5
    }
    cout << "s1 += s2 的结果是:s1=";                      	//L6
    s1 += s2;                                       
    cout << s1;                                             		//L7
                                                        
    cout << "\ns1 +=  to you 的结果是:";                     	//L8
    s1 += " to you";                               
    cout << "s1 = " << s1 <<endl;                              	//L9
    s1[0] = 'H';      
    s1[6] = 'N';
	    s1[10] = 'Y';
    cout << "s1 = " << s1 << "\n";                               //L10
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值