C++【String类】String插入单个字符,插入字符串的函数实现

来源:互联网 发布:陶哲轩智商知乎 编辑:程序博客网 时间:2024/06/05 21:56
#include<iostream>#include<stdlib.h>#include<assert.h>using namespace std;class String{public:    String(const char* str)        :_str(new char[strlen(str) + 1])    {        _size = strlen(str);        _capacity = _size + 1;        strcpy(_str, str);      }        String(const String& s)        :_str(NULL)    {        String tmp(s._str);        swap(_str, tmp._str);    }    ~String()    {        if (_str)        {            delete[] _str;            _size =0;            _capacity =0;            _str = NULL;        }    }        //插入单个字符    void Insert(char ch, size_t pos)    {        assert(pos <= _size);        CheckCapacility();        size_t begin = _size;        while (begin >= pos)        {            _str[begin + 1] = _str[begin];            begin--;        }        _str[pos] = ch;        ++_size;    }        //插入字符串    /*void Insert(size_t pos, const char* s1)    {                           assert(pos <= _size);                int len = strlen(s1);        CheckCapacility(_size+len+1);        size_t begin = _size;        while (begin >= pos)        {            _str[begin + len] = _str[begin];            --begin;        }        for (int i = 0; i < len;i++)        {            _str[pos++] = s1[i];        }    }    char* Cstr()    {        return _str;    }private:    void CheckCapacility(int Needlen)    {                if (Needlen >= _capacity)        {            _capacity = Needlen > 2 * _capacity ? Needlen : 2 * _capacity;            _str = (char*)realloc(_str, _capacity);        }    }private:    char* _str;    int _size;    int _capacity;};void Test(){    String s("helorld,hello bit!");    s.Insert(3,"lo w");    cout << s.Cstr() << endl;}int main(){    Test();    system("pause");    return 0;}


0 0
原创粉丝点击