#include <iostream>
#include<string.h>
using namespace std;
class Mystring
{
private:
// string str;
int size;
char *name;
public:
//构造函数
Mystring(){name=new char[32];size=32;cout<<"无参构造"<<endl;}
Mystring(char *a){name=new char[32];size=32;char nm[128]="";strcpy(nm,a);strcpy(name,nm);cout<<"有参构造"<<endl;}
//析构函数
~Mystring(){delete name;name=NULL;cout<<"析构函数"<<endl;}
//operator=为字符串赋值函数
Mystring &operator=(const Mystring& a)
{
char nm[128]="";
strcpy(nm,a.name);
strcpy(this->name,nm);
return *this;
}
Mystring &operator=(const char* a)
{
char nm[128]="";
strcpy(nm,a);
strcpy(this->name,nm);
return *this;
}
void show()
{
cout<<"str= "<<this->name<<endl;
}
//at 访问指定字符 有边界检查
char &at(int a)
{
if(a>32)
{
cout<<"失败"<<endl;
}
int b=strlen(name);
cout<<"边界值为"<<b-1<<endl;
if(a>=b)
{
cout<<"越界"<<endl;
return name[a];
}
return name[a];
}
//operator[]访问指定字符
char &operator[](int a)
{
if(a>32)
{
cout<<"失败"<<endl;
}
int b=strlen(name);
cout<<"边界值为"<<b-1<<endl;
if(a>=b)
{
cout<<"越界"<<endl;
return name[a];
}
return name[a];
}
//data返回指定字符串首字符的指针
char *data()
{
return name;
}
//c_str 返回字符串得不可修改的C字符数组版本
const char *c_str()const
{
return name;
}
//empty检查字符串是否为空
bool empty()
{
return strlen(name)==0;
}
//size返回字符串
int sz()
{
return strlen(name);
}
//capacity 返回当前对象分配的空间能保存的字符数量
int capacity()
{
return size;
}
//clear //清除内容
Mystring & clear()
{
for(int i=0;i<size;i++)
{
this->name[i]='\0';
}
return *this;
}
//push_back 后附字符到结尾
Mystring &push_back(char a)
{
int b= strlen(name);
name[b]=a;
return *this;
}
//pop_back 移除末尾字符
Mystring &pop_back()
{
int b=strlen(name);
if(b>0)
{
name[b-1]='\0';
return *this;
}
else
{
cout<<"字符串为空移除失败"<<endl;
}
return *this;
}
//append 后附字符到结尾
Mystring &append(char* a)
{
char arr[128]="";
strcpy(arr,a);
strcat(name,arr);
return *this;
}
//operator+=后附字符到结尾
Mystring &operator+=(const char a)
{
int b= strlen(name);
name[b]=a;
return *this;
}
//operator+链接两个字符串或者或一个字符
Mystring &operator+(char *a)
{
char arr[128]="";
strcpy(arr,a);
strcat(name,arr);
return *this;
}
Mystring &operator+(char a)
{
int b= strlen(name);
name[b]=a;
return *this;
}
//operator==比较字符串
bool operator==(const Mystring& a)const
{
return (strcmp(this->name,a.name))==0;
}
bool operator==(const char * a)const
{
char buf[128]="";
strcpy(buf,a);
return (strcmp(this->name,buf))==0;
}
bool operator!=(const Mystring& a)const
{
return (strcmp(this->name,a.name))!=0;
}
bool operator!=(const char * a)const
{
char buf[128]="";
strcpy(buf,a);
return (strcmp(this->name,buf))!=0;
}
bool operator>(const Mystring& a)const
{
return (strcmp(this->name,a.name))>0;
}
bool operator>(const char * a)const
{
char buf[128]="";
strcpy(buf,a);
return (strcmp(this->name,buf))>0;
}
bool operator<(const Mystring& a)const
{
return (strcmp(this->name,a.name))<0;
}
bool operator<(const char * a)const
{
char buf[128]="";
strcpy(buf,a);
return (strcmp(this->name,buf))<0;
}
bool operator>=(const Mystring& a)const
{
return (strcmp(this->name,a.name))>=0;
}
bool operator>=(const char * a)const
{
char buf[128]="";
strcpy(buf,a);
return (strcmp(this->name,buf))>=0;
}
bool operator<=(const Mystring& a)const
{
return (strcmp(this->name,a.name))<=0;
}
bool operator<=(const char * a)const
{
char buf[128]="";
strcpy(buf,a);
return (strcmp(this->name,buf))<=0;
}
friend ostream &operator<<(ostream &L,const Mystring &r);
};
ostream &operator<<(ostream &L,const Mystring &r)
{
L<<r.name<<endl;
return L;
}
int main()
{
Mystring s1;
s1="hahaha";
s1.show();
Mystring s2;
s2 =s1;
s2.show();
Mystring s3("haha");
s3.show();
cout<<s3.at(0)<<endl;
char ch=s3[1];
cout<<ch<<endl;
char *qtr=s3.data();
qtr[1]='q';
cout<<qtr<<endl;
cout<<s3.c_str()<<endl;
if(s1.empty())
{
cout<<"字符串为空"<<endl;
}
else
{
cout<<"不空"<<endl;
}
cout<<"当前字符数量为"<<s3.sz()<<endl;
cout<<"最大容纳空间为"<<s3.capacity()<<endl;
s3.clear();
s3.show();
s3.push_back('a');
s3.show();
s3.pop_back();
s3.show();
s3.append("nihao");
s3.show();
s3+='P';
s3.show();
Mystring s4=s3;
if(s3==s4)
{
cout<<"相同"<<endl;
}
else
{
cout<<"不相同"<<endl;
}
if(s3!=s4)
{
cout<<"不相同"<<endl;
}
else
{
cout<<"相同"<<endl;
}
if(s3>s4)
{
cout<<"大于"<<endl;
}
{
cout<<"小于或等于"<<endl;
}
if(s3<s4)
{
cout<<"小于"<<endl;
}
else
{
cout<<"大于或等于"<<endl;
}
if(s3>=s4)
{
cout<<"大于等于"<<endl;
}
else
{
cout<<"小于"<<endl;
}
if(s3<=s4)
{
cout<<"小于等于"<<endl;
}
else
{
cout<<"大于"<<endl;
}
cout<<s3;
return 0;
}