仿照string类,写一个my_string类
#include <iostream>
#include <cstring>
using namespace std;
class my_string
{
//private:
char *str;
int len;
public:
//无参构造
my_string()
{
len=0;
str=NULL;
}
//有参构造
my_string(int m_len,char *m_str)
{
len=m_len;
str=new char[m_len];
for(int i=0;i<len;i++)
{
str[i]=*m_str;
}
}
my_string(char *m_str) //有参构造的重载
{
len=strlen(m_str);
str=new char[len];
for(int i=0;i<len;i++)
{
str[i]=m_str[i];
}
}
//拷贝构造
my_string( my_string &p)
{
this->len=p.my_size();
char *temp=p.my_str();
str=new char[len];
for(int i=0;i<len;i++)
{
str[i]=temp[i];
}
}
//拷贝赋值
my_string & operator =( my_string p1) //第一种拷贝赋值
{
if(str!=NULL)
{
delete []str;
str=NULL;
}
len=p1.my_size();
str=new char[p1.my_size()];
char *temp=p1.my_str();
for(int i=0;i<len;i++)
{
str[i]=temp[i];
}
return *this;
}
my_string & operator =(char *p) //第二种拷贝赋值
{
if(str != NULL)
{
delete []str;
str =NULL;
}
this->len =strlen(p);
this->str=new char[len];
for(int i=0;i<len;i++)
{
str[i]=p[i];
}
return *this;
}
char& operator [](int a) //取成员
{
return this->my_str()[a];
}
my_string & operator+(const my_string &p) //加法重载
{
static my_string temp1;
temp1.len=this->len+p.len;
temp1.str=new char[temp1.len];
for(int i=0;i<temp1.len;i++)
{
if(i<this->len)
{
temp1.str[i]=this->str[i];
}
else
{
temp1.str[i]=p.str[i-(this->len)];
}
}
return temp1;
}
bool operator >(my_string &p) //大于
{
if(strcmp(this->my_str(),p.my_str())>0)
{
return true;
}
else
{
return false;
}
}
bool operator <(my_string &p) //小于
{
if(strcmp(this->my_str(),p.my_str())<0)
{
return true;
}
else
{
return false;
}
}
bool operator ==(my_string &p) //等于
{
if(strcmp(this->my_str(),p.my_str())==0)
{
return true;
}
else
{
return false;
}
}
bool operator !=(my_string &p) //不等于
{
if(strcmp(this->my_str(),p.my_str())!=0)
{
return true;
}
else
{
return false;
}
}
bool operator >=(my_string &p) //大于等于
{
if(strcmp(this->my_str(),p.my_str())>=0)
{
return true;
}
else
{
return false;
}
}
bool operator <=(my_string &p) //小于等于
{
if(strcmp(this->my_str(),p.my_str())<=0)
{
return true;
}
else
{
return false;
}
}
//析构
~my_string()
{
if(str != NULL)
{
delete []str;
str = NULL;
}
}
//bool my_empty() 判空
bool my_emty()
{
if(len==0)
{
return 1;
}
else
{
return 0;
}
}
//int my_size() 求长度
int my_size()
{
return len;
}
//char *my_str() 转化为c风格字符串
char * my_str()
{
char *p= new char[len+1];
for(int i=0;i<len;i++)
{
p[i]=str[i];
}
p[len]='\0';
return p;
}
char my_at(int a) //成员访问my_at()
{
return str[a];
}
};
int main()
{
// my_string name1(5,"d");
// my_string name;
// name=name1;
// my_string name;
// name ="xh";
my_string name1("xh");
my_string name2("nb");
// my_string name3("xh");
// my_string name4("xh1");
// if(name1<name2)
// {
// cout<<"name1<name2"<<endl;
// }
// else
// {
// cout<<"name1>name2"<<endl;
// }
// if(name1==name3)
// {
// cout<<"equal"<<endl;
// }
// if(name1!=name4)
// {
// cout<<"no equal"<<endl;
// }
my_string name;
// name="haah";
name= name1 + name2;
// my_string name=name1.operator +(name2);
// my_string name;
// name = name1.operator +(name2);
//cout<<name.my_size()<<endl;
//name="xh";
//cout<<name.my_emty()<<endl;
//cout<<name.my_size()<<endl;
//cout<<*name.my_str()<<endl;
for(int i=0;i<name.my_size();i++)
{
cout<<name.my_at(i)<<' ';
}
cout<<endl;
return 0;
}