#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;
}
C++实现String类
最新推荐文章于 2022-10-25 23:32:15 发布