#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 Erase(size_t pos)
    {
        assert(pos <=_size);  //pos>_size报错
        int begin = pos;
        while (begin <= _size)
        {
            _str[begin] = _str[begin + 1];
            begin++;
        }
        --_size;
    }*/

    //删除字符串
    void Erase(size_t pos, int len)
    {
        assert(pos <= _size);
    
        int len1 = len + 1;
        while (len1--)
        {
            _str[pos] = _str[pos + len +1];
            pos++;
        }
        _size = _size - len;
    }
    
    char* C_str()
    {
        return _str;
    }
    
private:
    char* _str;
    int _size;
    int _capacity;
};


void Test()
{
    String s("abcdefghijk");
    s.Erase(2,4);
    cout << s.C_str() << endl;
}


int main()
{
    Test();
    system("pause");
    return 0;
}