- #include
- #include
-
- using namespace std;
- class myString
- {
- private:
- char *str; //记录c风格的字符串
- int size; //记录字符串的实际长度
- public:
- //无参构造
- myString():size(10)
- {
- str = new char[size]; //构造一个长度为10的字符串
- strcpy(str," "); //赋值为空串
- }
- //有参构造
- myString(const char *s)
- {
- size = strlen(s);
- str =new char[size+1];
- strcpy(str,s);
- }
- //拷贝构造
- myString(const myString &other)
- {
- size = strlen(other.str);
- str =new char[size+1];
- strcpy(str,other.str);
- }
- //析构函数
- ~myString ()
- {
- delete str;
- str = nullptr;
- }
- //拷贝赋值函数
- myString & operator=(const myString &other)
- {
- if(this != &other)
- {
- if(this->str != NULL)
- {
- delete str;
- }
- this->str = new char[strlen(other.str)+1];
- strcpy(str,other.str);
- }
- return *this;
- }
- //判空函数
- bool str_empty()
- {
- return str == nullptr;
- }
- //size函数
- int str_size()
- {
- return size;
- }
- //c_str函数
- char *c_str()
- {
- char *c_string = new char[size +1];
- strcpy(c_string, str);
- return c_string;
- }
- //at函数
- char &at(int pos)
- {
- if(pos<0||pos>size-1)
- return*str;
- return *(str+pos);
- }
- //加号运算符重载
- const myString operator+(const myString &s)
- {
- myString tmp;
- tmp.size = size + s.size;
- tmp.str = new char[tmp.size+1];
- strcpy(tmp.str,str);
- char *dstr = tmp.str + size;
- strcpy(dstr, s.str);
- dstr = nullptr;
- return tmp;
- }
- //加等于运算符重载
- const myString operator+=(const myString &s)
- {
- myString tmp(*this);
- size = tmp.size + s.size;
- delete str;
- str = new char[size+1];
- strcpy(str,tmp.str);
- char *dstr = str + tmp.size;
- strcpy(dstr, s.str);
- dstr = nullptr;
- return *this;
- }
- //关系运算符重载(>)
- bool operator >(const myString &s)
- {
- int i=0;
- for(;(*(str+i)==*(s.str+i) && *(str+i)!=0 && *(s.str+i)!=0);i++);
- return *(str+i)-*(s.str+i)>0;
- }
- //中括号运算符重载
- char &operator[](int pos)
- {
- if(pos<0||pos>size-1)
- return *str;
- return *(str+pos);
- }
- //定义成员函数
- void show()
- {
- cout<
- }
- };
-
- int main()
- {
- myString s1("hello ");
- myString s2("world");
- myString s3;
- s3 = s1+s2;
- s3.show();
-
- myString s4;
- s4 = s3;
- s4.show();
-
- s1+=s2;
- s1.show();
-
- s1[0]='H';
- s1.show();
-
- s1.at(6)='W';
- s1.show();
- return 0;
- }
