C++实现String类

#include<iostream>
#include<string>
#include<cctype>
using namespace std;
class String
{
private:
	char *str;
	int len;
	static int num_strings;
public:
	String();
	String(const char *s);
	String(const String &);
	~String();
	void Stringlow();
	int length()const{return len;}
	String &operator=(const String &);
	String &operator=(const char *);
	char &operator[](int i);
	const char &operator[](int i)const;//have a question???
	friend bool operator<(const String &st1,const String &st2);
    friend bool operator>(const String &st1,const String &st2);
	friend bool operator==(const String &st1,const String &st2);
	friend String operator+(const String &st1,const String &st2);
	friend ostream &operator<<(ostream &os,const String &st);
	friend istream &operator>>(istream &is,String &st);
};
int String::num_strings=0;
String::String()
{
	len=4;
	str=new char[1];
	str[0]='\0';
	num_strings++;
}
String::String(const char *s)
{
	len=strlen(s);
	str=new char[len+1];
	strcpy(str,s);
	num_strings++;
}
String::String(const String &st)
{
	num_strings++;
	len=st.len;
	str=new char[len+1];
	strcpy(str,st.str);

}
String::~String()
{
	--num_strings;
	delete[]str;
}
String &String::operator=(const String &st)
{
	if(this==&st)
		return *this;
	delete[]str;
	len=st.len;
	str=new char[len+1];
	strcpy(str,st.str);
	return *this;
}
String &String::operator=(const char *s)
{
	delete[]str;
	len=strlen(s);
	str=new char[len+1];
	strcpy(str,s);
	return *this;
}
char &String::operator[](int i)
{
	return str[i];
}
const char &String::operator[](int i)const
{
	return str[i];
}
bool operator<(const String &st1,const String &st2)
{
	return (strcmp(st1.str,st2.str)<0);
}
bool operator>(const String &st1,const String &st2)
{
	return st1>st2;
}
bool operator==(const String &st1,const String &st2)
{
	return (strcmp(st1.str,st2.str)==0);
}
String operator+(const String &st1,const String &st2)
{
	char *strTemp=new char[st1.len+st2.len];
	strcpy(strTemp,st1.str);
	strcat(strTemp,st2.str);
	String Str(strTemp);
	delete[]strTemp;
	return(Str);

}

ostream &operator<<(ostream &os,const String &st)
{
	os<<st.str;
	return os;
}
istream &operator>>(istream &is,String &st)
{
	char temp[80];
	is.get(temp,80);
	if(is)
		st=temp;
	while(is && is.get()!='\n')
		continue;
	return is;
}
int main()
{
	String str1,str2,strT;
	cin>>str1>>str2;
	strT=str1;
	cout<<strT<<endl;
	cout<<str2<<endl;
	cout<<strT+str2<<endl;
	
	system("pause");
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值