实现自定义string

头文件

#include <string.h>
#include <iostream>

class MyString {
public:
    MyString(const char * str = nullptr);
    MyString(const MyString & str);
    MyString(size_t count, char c);
    ~MyString();
    MyString & operator= (const MyString & str);
    bool operator== (const MyString & str);
    const char * c_str() const;
    size_t size() const;

    friend std::istream & operator>>(std::istream & is, MyString & str);
    friend std::ostream & operator<<(std::ostream & os, const MyString & str);
private:
    char * data;
    size_t length;
};

源文件

#include "my_string.h"

using namespace std;

MyString::MyString(const char * str) {
    if(!str) {
        length = 0;
        data = new char[1];
        *data = '\0';
    } else {
        length = strlen(str);
        data = new char[length + 1];
        strcpy(data, str);
    }
    cout << "MyString(const char * str)" << endl;
}

MyString::MyString(const MyString & str) {
    length = str.length;
    data = new char[length + 1];
    strcpy(data, str.c_str());
    cout << "MyString(const MyString & str)" << endl;
}

MyString::MyString(size_t count , char c) {
    length = count;
    data = new char[count + 1];
    for(size_t i = 0; i < count; i++) {
        *(data + i) = c;
    }
}

MyString::~MyString() {
    length = 0;
    delete [] data;
}

MyString & MyString::operator=(const MyString & str) {
    if(*this == str) {
        return *this;
    }
    delete [] data;
    length = str.length;
    data = new char[length + 1];
    strcpy(data, str.c_str());
    cout << "operator=" << endl;
    return * this;
}

bool MyString::operator==(const MyString & str) {
    if(length != str.length) {
        return false;
    }
    return strcmp(data, str.c_str()) ? false : true;
}

const char * MyString::c_str() const {
    return data;
}

size_t MyString::size() const {
    return length;
}

istream & operator>>(istream & is, MyString & str) {
    char tem[1000];
    is >> tem;
    str.length = strlen(tem);
    delete [] str.data;
    str.data = new char[str.length + 1];
    strcpy(str.data, tem);
    return is;
}

ostream & operator<<(ostream & os, const MyString & str) {
    os << str.data;
    return os;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值