string类

string类的实现是笔试面试常见的题型之一,考察的关键点是函数的返回值和函数的参数,这个是很关键的,如果仅仅是简单的以为把函数里面的逻辑写出来是远远不够的。另外一个关键就是深拷贝和浅拷贝和内存的申请和释放。

1、下面直接给出基本的类定义:

class MyString
{
public:
    MyString();
    MyString(const char *str);
    MyString(const MyString& rhs);
    ~MyString();
    MyString& operator=(const MyString& rhs);
    MyString operator+(const MyString& rhs);
    char operator[](const unsigned int index);
    bool operator==(const MyString& rhs);
private:
    char *_str;
};

2、函数的实现

2.1、默认构造函数

MyString::MyString()
{
    _str = new char[1];  //申请一个字节的空间,放入'\0'
    *_str = '\0';
}

2.2、常用构造函数

//使用const char* str来初始化
MyString::MyString(const char* str)
{
    if(NULL == str)
    {
        _str = new char[1]; 
        *_str = '\0'; 
    }else
    {
        int len = strlen(str);
        _str = new char[len+1];
        snprintf(_str,len,"%s",str); //放弃使用strcpy
    }

}

2.3、拷贝构造函数

MyString::MyString(const MyString& rhs)
{
    int len = strlen(rhs._str);
    _str = new char[len+1];
    snprintf(_str,len,"%s",str); //放弃使用strcpy
}

2.4、析构函数

MyString::~MyString()
{
    if(_str)
    {
        delete[] _str;
        _str = NULL;
    }
}

2.5、赋值操作符

MyString::MyString& operator=(const String& rhs)
    {
        if (this != &rhs)
        {
            delete[] _str;

            _str = new char[strlen(rhs._str) + 1];
            strcpy(_str, rhs._str);
        }

        return *this;
    }

2.6、+操作符重载

MyString MyString::operator+(const MyString& rhs)
{
    MyString newString;
    if( !rhs._str)
    {
        newString = *this;
    }else if( !_str)
    {
        newString = rhs;
    }else
    {
    newString._str = new char[strlen(_str)+strlen(rhs._str)+1];
    snprintf(_str,len,"%s",_str);
    strcat(newString,_str,rhs._str);
    }

    return newString;
}

2.7、重载[]

char MyString::operator[](const unsigned int index)
{
    return _str[index];
}

2.8、判断相等

bool MyString::operator==(const MyString& rhs)
{
    return 0 == strcmp(_str,rhs._str);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值