思维导图
仿照string类,实现myString类
/* ---------------------------------@author:YoungZorncreated on 2023/7/19 19:20.---------------------------------
*/
#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,""); //初始化myString对象str为空串}//有参构造myString(const char *s) //string s("hello world"){size = strlen(s);str = new char[size+1]; //末尾添加 '\0'strcpy(str, s); //--->str = "hello world"}//拷贝构造myString(const myString & other):str(new char(*other.str)),size(other.size){}//析构函数~myString(){delete [] str;}//拷贝赋值函数myString& operator=(const myString& other){if(this != &other){delete [] str; //释放原有的内存this->size = other.size;this->str = new char(*(other.str));}return *this;}//判空函数bool isEmpty(){if(strcmp(str,"") == 0){return true;}return false;}//size函数int strSize(){if (isEmpty()){return -1;}return strlen(str);}//c_str函数const char *str_c_str()const{return str; //返回一个C风格的字符串}//at函数char &at(int pos){if (isEmpty()){const int &ref = -1;return (char &)ref;}return str[pos]; //返回字符所在字符串的下标}//加号运算符重载 (+)const myString operator+ (const myString & R) const{int newSize = size + R.size; //新字符串的长度char *newStr = new char[newSize+1]; //分配新字符串内存strcpy(newStr, this->str);strcat(newStr,R.str);return myString(newStr);}//加等于运算符重载 (+=)const myString operator+= (const myString & R){size += R.size; //更新sizestrcat(this->str,R.str); //将R.str追加到str上return myString(this->str);}//关系运算符重载 (>)bool operator> (const myString & R) const {int flag = strcmp(this->str,R.str);if (flag > 0)return true;return false;}
};int main(){myString string1 = "hello";bool flag = string1.isEmpty();cout<<flag<<endl;cout<<string1.strSize()<<endl;cout<<"at[0]:"<<string1.at(0)<<endl;myString s1 = "qwe";myString s2 = "asd";cout<<(s1>s2)<<endl; //判断 s1 和 s2 的大小s1 += s2;cout<<"s1 += s2 = "<<s1.str_c_str()<<endl; // +=cout<<s1.str_c_str()<<endl;myString s3 = "aaa";myString s4 = "bbb";myString s5 = s3 + s4;cout<<"s3 + s4 = "<<s5.str_c_str()<< endl; // +return 0;
}