C++ string类的实现

C++String类主要函数的实现:

class MyString
{
    friend ostream& operator<< (ostream&, MyString&);  //重载<<
    friend istream& operator >> (istream&, MyString&);   //重载>>
public:
    MyString(const char* str=NULL);               //构造函数
    MyString(const MyString &str);                //赋值构造函数
    MyString& operator=(const MyString &str);     //重载运算符=
    MyString operator+(const MyString &str);      //重载运算符+
    bool operator==(const MyString&);             //重载运算符==
    char& operator[](unsigned int);               //重载运算符[]
    size_t size() { return strlen(data); }
    ~MyString() { delete[] data; }
private:
    char *data;                        //保存字符串
}

MyString::MyString(const char*str)
{
    if(str == NULL)
    {
        data = new char[1];
        *data = '\0';
    }
    else
    {
        int length = strlen(str);
        data = new char[length + 1];
        strcpy(data, str);
    }
}
MyString::MyString(const MyString &str)
{
    int length = strlen(str.data);
    data = new char[length + 1];
    strcpy(data, str.data);
}
MyString& MyString::operator=(const MyString& str)
{
    if(this == &str)    //检查自赋值
        return *this;
    delete[] data;   //释放原有内存资源
    //分配新的内存资源,并复制内容
    int length = strlen(str.data);
    data = new char[length + 1];
    strcpy(data, str.data);
    //返回本对象引用
    return *this;
}
MyString MyString::operator+(const MyString &str) const
{
    MyString newString;
    if(!str.data)
        newString = *this;
    if(!data)
        newString = str;
    else
    {
        newString.data = new char[strlen(data) + strlen(str.data) + 1];
        strcpy(newString.data, data);
        strcat(newString.data, str.data);
    }
    return newString;
}
bool MyString::operator==(const MyString& str)
{
    if(strlen(str.data) != strlen(data))
        return false;
    return strcmp(data, str.data) ? false : true;
}
char& MyString::operator[](unsigned int n)
{
    if(n >= 0 && n <= strlen(data))
        return data[n];
}
ostream& operator<<(ostream& os, MyString& str)
{
    os << str.data;
    return os;
}
istream& operator>>(istream& is, MyString& str)
{
    char temp[256];
    is >> setw(256) >> temp;
    str = temp;
    return temp;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值