仿照string类
#include <iostream>
#include <cstring>
using namespace std;
class mystring
{
private:
char *str;
int size;
public:
//无参构造
mystring():size(15)
{
str = new char[size];
strcpy(str,"");
}
//有参构造
mystring(const char *s)
{
size = strlen(s);
str = new char[size+1];
strcpy(str,s);
}
//拷贝构造
mystring(const mystring &other):str(new char(*(other.str))),size(other.size)
{
strcpy(this->str,other.str);
}
//析构函数
~mystring()
{
delete str;
cout<<"mystring : 析构函数,this ="<<this<<endl;
}
//判空函数
bool Empty()
{
return str[0]=='\0';
}
//size函数
int mysize()
{
int len=strlen(str);
return len;
}
//c_str函数
char *c_str()
{
return str;
}
//at函数
char &at(int pos)
{
if(pos<0||pos>size-1)
{
cout<<"非法访问"<<endl;
exit(0);
}
else
{
return str[pos];
}
}
//拷贝赋值函数
mystring & operator=(const mystring &other)
{
if(this != &other)
{
this->size=other.size;
//*(this->str)=*(other.str);
strcpy(this->str,other.str);
}
return *this;
}
//[]
char & operator[](int pos)
{
return this->str[pos];
}
//+
mystring operator+(const mystring &other)
{
mystring temp;
strcpy(temp.str,strcat(this->str,other.str));
return temp;
}
//==
bool operator==(const mystring &other) const
{
return strcmp(this->str,other.str)==0;
}
//!=
bool operator!=(const mystring &other) const
{
return strcmp(this->str,other.str)!=0;
}
//<
bool operator<(const mystring &other) const
{
return strcmp(this->str,other.str)<0;
}
//>
bool operator>(const mystring &other) const
{
return strcmp(this->str,other.str)>0;
}
//<=
bool operator<=(const mystring &other) const
{
return strcmp(this->str,other.str)==0||strcmp(this->str,other.str)<0;
}
//>=
bool operator>=(const mystring &other) const
{
return strcmp(this->str,other.str)==0||strcmp(this->str,other.str)>0;
}
friend ostream & operator<<(ostream &L,const mystring &other);
friend istream & operator>>( istream &L, mystring &other);
};
//<<
ostream & operator<<(ostream &L,const mystring &other)
{
L<<other.str<<endl;
return L;
}
//>>
istream & operator>>( istream &L, mystring &other)
{
L>>other.str;
return L;
}
int main()
{
mystring s; //无参构造函数
if(s.Empty()) //判空
{
cout<<"yes"<<endl;
}else{
cout<<"no"<<endl;
}
mystring s1("hello world");
cout<<"s1 ="<<s1.c_str()<<endl;
cout<<"s1 长度="<<s1.mysize()<<endl;
mystring s2(s1); //拷贝构造函数
cout << "s2 =" <<s2.c_str()<< endl;
s=s2; //拷贝赋值函数
if(s.Empty())
{
cout<<"yes"<<endl;
}else{
cout<<"no"<<endl;
}
cout << "s =" <<s.c_str()<< endl;
s.at(0)='T'; //at()函数
cout << "s =" <<s.c_str()<< endl;
s[1]='T'; //[]
cout << "s =" <<s.c_str()<< endl;
mystring s3=s1+s; //+
cout << "s3 =" <<s3.c_str()<< endl;
if(s1==s1) //==
cout<<"相等"<<endl;
if(s1!=s2) //!=
cout<<"不相等"<<endl;
if(s3<s1) //<
{
cout<<"s3<s1"<<endl;
}else if(s3>s1) //>
{
cout<<"s3>s1"<<endl;
}
if(s3<=s1) //<=
{
cout<<"s3<=s1"<<endl;
}else if(s3>=s1) //>=
{
cout<<"s3>=s1"<<endl;
}
if(s1<=s1)
{
cout<<"s1<=s1"<<endl;
}
mystring s4;
cout<<"输入一个字符串>>>";
cin>>s4;
cout << "s4 =" <<s4<< endl;
return 0;
}
结果