作业  
仿照string类,实现myString  
代码  
#include <iostream>
#include <cstring>
using namespace std;
//仿照string完成myString类
class myString
{
    private:
        char *str;          //记录c风格的字符串
        int size;            //记录字符串的实际长度
    public:
        //无参构造
        myString():size(10)
        {
            str = new char[size];         //构造出一个长度为10的字符串
        }
        //有参构造
        myString(const char *s):size(strlen(s))            //有参构造     string  s("hello wirld");
        {
               str = new char[size+1];
               strcpy(str,s);
        }
        ~myString()             //定义析构函数,用于释放申请的空间
        {
            delete[] str;
        }
        //判空函数
        bool empty();
        //size函数
        int ssize();
        //c_str函数
        char *c_str();
        //at函数
        char &at(int index);
        void add(const char *s);
        //二倍扩容
        void expand();
};
bool myString::empty()      //判空函数
{
    return size == 0;
}
int myString::ssize()
{
    return size;
}
char *myString::c_str()     //传换成c风格的字符串
{
    return str;
}
char &myString::at(int index)   //返回元素
{
    return str[index];
}
void myString::add(const char *s)   //如果使用的是无参构造函数,需要进行字符串的写入使用该函数
{
    if(strlen(s) > (unsigned)size)  //检测是否默认申请的大小是否可以容纳下写入的字符串
    {
        expand();           //进行二倍扩充
    }
    strcpy(str,s);
}
void myString::expand() //二倍扩充
{
    size = 2 * size;    //默认的size*2
    char *temp = new char[size+1];  //申请一个大小为之前两倍的空间
    strcpy(temp,str);   //将之前的数据放入新的空间内
    char *p = str;      //准备释放原空间
    str = temp;         //原来的指针指向新的空间
    delete []p;         //删除原空间
}
int main()
{
    myString s1("hello world");     //使用有参构造函数并初始化为“hello world”
    s1.at(0) = 'H';             //把“hello world”的第一个元素'h'变成'H'
    printf("%s\n",s1.c_str());  //输出c语言风格的字符串
    cout << "size = " << s1.ssize() << endl;    //输出size,因为用的是有参构造函数,所以他的size就是字符串的大小
    myString s2;        //使用无参构造函数,初始默认的size为10
    s2.add("hello world");    //写入"hello world"
    printf("%s\n",s2.c_str());  //输出c语言风格的字符串
    cout << "size " << s2.ssize();  //输出size,因为"hello world"的大小是11,所以会进行二倍扩充,size就变成了20,字符串的长度是21
    return 0;
}
效果图  
   
思维导图