1.仿照string类,完成myString 类
代码:
#include <iostream>
#include <cstring>using namespace std;class myString
{private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度public://无参构造myString():size(10){str = new char[size]; //构造出一个长度为10的字符串strcpy(str,""); //赋值为空串cout<<"无参构造"<<endl;}//有参构造myString(const char *s) //string s("hello world"){size = strlen(s);str = new char[size+1];strcpy(str, s);cout<<"有参构造"<<endl;}//拷贝构造myString(const myString &other):str(new char(*other.str)),size(other.size){
// strcpy(str,""); //赋值为空串
// for(int i=0;i<this->size;i++)
// {
// str[i]=this->str[i];
// }cout<<"拷贝构造成功"<<endl;}//析构函数~myString(){delete str;str=nullptr;}//拷贝赋值函数myString & operator=(const myString &other){if(this!=&other){this->size=other.size;if(this->str!=NULL){delete this->str;}this->str=new char(*other.str);}cout<<"拷贝赋值成功"<<endl;return *this;}//判空函数bool empty(){if(strcmp(str,"")==0){return true;}else {return false;}}//size函数int s_size(){return strlen(this->str);}//c_str函数:返回字符串的首地址char *c_str(){return str;}//at函数char &at(int pos){return str[pos];}//加号运算符重载const myString operator+(myString &s)const{myString c;c.size=this->size+s.s_size();c.str=this->str;strcat(c.str,s.str);return c;}//加等于运算符重载myString & operator+=(const myString &s){this->size+=s.size;strcat(this->str,s.str);return *this;}//关系运算符重载(>)bool operator>(const myString &s)const{if(strcmp(this->str,s.str)>0){return true;}else {return false;}}//中括号运算符重载char & operator[](int index){return this->str[index];}//查看函数void show(){cout<<"size="<<size<<endl;cout<<"s_size="<<s_size()<<endl;cout<<"str="<<str<<endl;}
};int main()
{myString s1("hello");s1.show();myString s2(" world");s2.show();myString s3=s1+s2;s3.show();if(s1>s2){cout<<"yes"<<endl;}else{ cout<<"no"<<endl; }return 0;
}
运行结果:
2.思维导图