#include <iostream>
#include <cstring>
using namespace std;
class my_string
{
private:
char *str;
int len;
public:
my_string()
{
len = 15;
str = new char[15];
}
//有参构造
my_string(char *p)
{
len = strlen(p);
str = new char[strlen(p)+1];
strcpy(str, p);
cout<<"有参构造函数"<<endl;
}
//拷贝构造
my_string(const my_string &other)
{
if(this != &other)
{
this ->len = other.len;
this->str = new char[len+1];
strcpy(this->str, other.str);
}
cout<<"拷贝构造函数"<<endl;
}
//拷贝赋值
my_string &operator=(const my_string &other)
{
if(this != &other)
{
this->len = other.len;
this->str = new char[len+1];
strcpy(this->str, other.str);
}
cout<<"拷贝赋值函数"<<endl;
return *this;
}
//析构函数
~my_string()
{
delete str;
// cout<<"析构函数"<<endl;
}
void show()
{
cout<<"str::"<<str<<endl;
}
//判空
bool empty()
{
if(len==0)
{
return true;
}
else
{
return false;
}
}
//求总长度
int size()
{
return len;
}
//at()
char &at(int pos)
{
return str[pos];
}
//转c风格字符串
char *c_str()
{
return str;
}
my_string &operator+=(const my_string &R)
{
if(this->str != NULL)
{
char* s = new char[this->len +1];
strcpy(s, this->str);
delete []this->str;
this->str = new char[this->len+strlen(R.str)+1];
strcpy(this->str, s);
strcat(this->str, R.str);
this->len += R.len;
}
else
{
this->str = new char[R.len+1];
strcpy(this->str, R.str);
this->len += R.len;
}
return *this;
}
const my_string operator+(const my_string &R) const
{
my_string s;
s.str = new char[this->len+strlen(R.str)+1];
strcpy(s.str, this->str);
strcat(s.str, R.str);
s.len = this->len + R.len;
return s;
}
bool operator>(const my_string &R) const
{
return strcmp(this->str, R.str)>0;
}
bool operator<(const my_string &R) const
{
return strcmp(this->str, R.str)<0;
}
bool operator==(const my_string &R) const
{
if(strcmp(this->str, R.str)==0)
{
return true;
}
else
{
return false;
}
}
const char &operator[](int pos) const
{
static char ch = -1;
if(pos>0 && pos <this->len)
{
return this->str[pos];
}
else
{
return ch;
}
}
};
int main()
{
char p[20]="zhangsan";
my_string s1(p);
my_string s2(s1);
s1.show();
my_string s3;
s3 = s1;
cout<<"s3.at(3):"<<s3.at(3)<<endl;
my_string s5;
s5 = s1+s3;
s5.show();
my_string s6("shanghai");
s6+=s1;
s6.show();
cout<<s6[2]<<endl;
my_string s7 = "shanghaizhangsan";
if(s6 == s7)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
return 0;
}