#include <iostream>
#include <cstring>
using namespace std;
class mystring
{
char *str;
int size;
public:
mystring():size(1)
{
str = new char[this->size];
strcpy(str,"");
}
mystring(const char *buf)
{
size = strlen(buf);
str = new char[size+1];
strcpy(str,buf);
}
//拷贝构造
mystring(const mystring &s):
str(new char [s.size+1]),
size(s.size){
strcpy(this->str,s.str);
}
//析构函数
~mystring()
{
delete []str;
str = nullptr;
cout<<"析构"<<endl;
}
//拷贝赋值
mystring &operator=(const mystring &s)
{
//得到s的size,赋值给this
this->size = s.size;
//new除size+1的空间,将字符串赋值过来
this->str = new char[this->size+1];
strcpy(this->str,s.str);
return *this;
}
//判空
bool strempty()
{
return *(str)==0?true:false;
}
//size
int retsize()
{
return size;
}
//c_str
char* &c_str()
{
return str;
}
//at
char &at(int pos)
{
return *(str+pos);
}
//+
mystring operator+(const mystring &R)
{
this->size += R.size;
strcat(this->str,R.str);
return *this;
}
//+=
mystring &operator+=(const mystring &R)
{
this->size+=R.size;
strcat(this->str,R.str);
return *this;
}
//>
bool operator>(const mystring &R)const
{
for(int i=0;i<this->size;i++)
{
if(*(this->str+i)>*(R.str+i))
return true;
else if(*(this->str+i)==*(R.str+i))
continue;
else
return false;
}
return false;
}
};
int main()
{
mystring s1("hello world");
mystring s2(s1);
s1 = "hi world";
mystring s3;
cout<<s2.c_str()<<endl;
if(s3.strempty())
cout<<"空串"<<endl;
else
cout<<"非空"<<endl;
s3 = s1+s2;
if(s1>s2)
cout<<"s1>s2"<<endl;
else
cout<<"s1<s2"<<endl;
cout<<s3.c_str()<<endl;
if(s3.strempty())
cout<<"空串"<<endl;
else
cout<<"非空"<<endl;
s1+=s3;
cout<<s1.c_str()<<endl;
cout<<s1.strempty()<<endl;
cout<<s1.retsize()<<s1.at(0)<<endl;
cout<<s2.retsize()<<s2.at(4)<<endl;
return 0;
}
脑图
https://www.mubu.com/doc/7FxL_beFGyz
https://www.mubu.com/doc/7FxL_beFGyz