c++自定义字符串类

#include <string.h>
#include <stdio.h>
//重载操作符
class String
{
protected:
    char* _data;
    int _size;
public:
    String()
    {
        _data = new char[1];
        _data[0] = 0;
        _size = 0;
    }
    String(const char* str)
    {
        _size = strlen(str);
        _data = new char[_size + 1];
        strcpy(_data, str);
    }
    String(char* data,int length)
    {
        _data = data;
        _size = length;
    }
    String(const String& right)
    {
        _size = right._size;
        _data = new char[_size + 1];
        strcpy(_data, right._data);
    }
    ~String()
    {
        delete[] _data;
        _size = 0;
    }
    void operator=(String& right)
    {
        delete[] _data;
        _size = right._size;
        _data = new char[_size + 1];
        strcpy(_data, right._data);
    }
    void operator+=(const String& right)
    {
        char* pTemp = new char[_size+right._size+1];
        strcpy(pTemp, _data);
        strcpy(pTemp+_size, right._data);
        delete[]_data;
        _data = pTemp;
        _size += right._size;
    }
    void operator+=(const char* str)
    {
        int len = strlen(str);
        char* pTemp = new char[_size + len + 1];
        strcpy(pTemp, _data);
        strcpy(pTemp + _size, str);
        delete[]_data;
        _data = pTemp;
        _size += len;
    }
    void operator+(const char* str)
    {
        int len = strlen(str);
        char* pTemp = new char[_size + len + 1];
        strcpy(pTemp, _data);
        strcpy(pTemp + _size, str);
        delete[]_data;
        _data = pTemp;
        _size += len;
    }
    void operator=(const char* str)
    {
        delete[] _data;
        _size = strlen(str);
        _data = new char[_size + 1];
        strcpy(_data, str);
    }
    String operator+(const String& right)
    {
        char* pData = new char[_size + right._size + 1];
        strcpy(pData, _data);
        strcpy(pData + _size, right._data);
        return String(pData, _size+right._size);
    }
    char& operator[](int index)
    {
        return _data[index];
    }
};

int main(int argc, char *argv[])
{
    String str;
    String str1("aaa");
    String str2 = "aaa";
    String str4 = str2;
    String str5;
    str5=str1;

    str5 += str2;
    char szBuf[10] = "he";
    str5 += szBuf;
    str5 += "test";
    str5 ="aaaaaaaa";
    str5 = str1 + str2;
    char szData[] = "hello world";
    printf("%d", sizeof(szData));

    str5[0] = 'c';

    getchar();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值