#include <iostream>
#include <string>
#include <cstring>
using namespace std;
class my_string
{
private:
char *str;
int len;
public:
my_string(){}
my_string(const char* s)
{
len = strlen(s);
str = new char[len+1];
for(int i = 0;i<len;i++)
{
*(str+i) = *(s+i);
}
}
my_string(const my_string &other)
{
len = other.len;
str = new char[len+1];
for(int i = 0;i<len;i++)
{
*(str+i) = *(other.str +i);
}
}
my_string & operator=(const my_string &other)
{
len = other.len;
str = new char[len+1];
for(int i = 0;i<len;i++)
{
*(str+i) = *(other.str +i);
}
return *this;
}
bool operator >(const my_string &other)
{
if(strcmp(this->str,other.str) > 0)
return true;
else
return false;
}
bool operator ==(const my_string &other)
{
if(strcmp(this->str,other.str) == 0)
return true;
else
return false;
}
my_string operator +(const my_string &other)
{
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(other.str) + 1];
strcpy(this->str,s);
strcat(this->str,other.str);
this->len += strlen(other.str);
delete []s;
}
else
{
this->str = new char[strlen(other.str) + 1];
strcpy(this->str,other.str);
this->len = strlen(other.str);
}
return *this;
}
char operator [](int index)
{
static char ch = -1;
if(index >= 0 && index < this->len)
{
return this->str[index];
}
else
{
return ch;
}
}
~my_string()
{
if(NULL != str)
{
delete []str;
str = NULL;
}
}
void show()
{
for(int i=0;i<len;i++)
{
cout<<*(str+i);
}
cout<<endl;
}
bool my_empty()
{
if(len == 0)
return true;
else
return false;
}
int my_size()
{
return len;
}
char *my_str()
{
return str;
}
};
int main()
{
my_string s;
my_string s1("hello");
s = s1;
my_string s2 = s1;
s.show();
s1.show();
s2.show();
cout<<s.my_empty()<<'\t'<<s.my_size()<<endl;
printf("%s\n",s.my_str());
cout<<(s1 == s2)<<endl;
my_string s3("world");
my_string s4 = s1 + s3;
s4.show();
cout <<s4[7]<<endl;
return 0;
}