实现Mystring.cpp

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
class Mystring
{
public:
    Mystring(const char* pStr = "" )
    {
        cout<<"using buliding"<<endl;
        _pStr = new char[strlen(pStr) + 1];
        strcpy(_pStr,pStr);
    }
    Mystring(const Mystring&s)
    {
        _pStr = new char[strlen(s._pStr)+1];
        strcpy(_pStr,s._pStr);
    }
    ~Mystring()
    {
        if(this != nullptr)
        {
            delete[] _pStr;
            _pStr = nullptr;
        }
    }
    void print_string()
    {
        cout<<_pStr<<endl;
    }
    Mystring& operator=(const Mystring&s)
    {
        if(this != &s)
        {
            _pStr = new char[strlen(s._pStr)];
            strcpy(_pStr,s._pStr);
        }
        return *this;
    }
    const char& operator[](const int idx)const
    {
        return _pStr[idx];
    }

    char& operator[] (const int idx)
    {
        return _pStr[idx];           //why??
    }

    size_t Size()const
    {
        char* ptemp = _pStr;
        int count = 0;
        while(*ptemp)
        {
            ptemp++;
            count++;
        }
    return count;
    }
    size_t lengh()const
    {
        char* ptemp = _pStr;
        int count = 0;
        while(*ptemp)
        {
            ptemp++;
            count++;
        }
    return count;
    }
    bool operator>(const Mystring&s)
    {   
        char *p = _pStr;
        char *per = s._pStr;
        while(*per)
        {
            if ((*p)>(*per))
            {
                return true;
            }
            else if((*p) == (*per) )
            {
                p++;
                per++;
            }
            else
            {
                return false;
            }   
        }    
    }
    bool operator==(const Mystring&s)
    {
        char* p = _pStr;
        char* pre = s._pStr;
        while (*pre) //此处为*pre 不是单纯的pre pre不为空 就不会为0
        {
            if (*p == *pre)
            {
                *p++;
                *pre++;
            }
            else
            {
                return false;
            }
        }
        return true;
    }
    bool operator!=(const Mystring&s)
    {
        char* p = _pStr;
        char* pre = s._pStr;
        while (*pre) //此处为*pre 不是单纯的pre pre不为空 就不会为0
        {
            if (*p == *pre)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        return false;      
    }
    Mystring& operator+=(const Mystring&s)
    {
        char *dest;
        int len =  lengh();
        dest = new char[strlen(s._pStr)+len+1];
        char *keep = dest;
        /*
        memcpy(dest,_pStr,lengh());
        memcpy(dest+len,s._pStr,s.lengh());
        */
        cout <<"--1-----"<<endl;
        char * p = s._pStr;
        char * p1 = _pStr;
        while(*p1 != '\0')
        {
            *dest = *p1;
            dest++,p1++;
        }
        while(*p !='\0')
        {
            *dest = *p;
            dest++,p++;
        }
        cout <<"----2---"<<endl;
        delete[]_pStr;
        _pStr = keep; //此处的dest已经跑到后面去了  不能直接赋值给_ptr 
        cout <<"----2---"<<endl;
        return *this;
    }

private:
    char*_pStr ;
};

int main()
{
    Mystring s1("you are shit");
    Mystring s2("you are dog");
    Mystring s3("you are shit");
    s3[5] = '-';
    s3.print_string();
    s1.print_string();
    cout << s1[2] <<endl;
    cout <<s1.Size()<<endl;
    printf("check = %d\n",s3==s1);
    s1.operator+=(s2);
    cout <<s1.Size()<<endl;
    cout<<"--" <<endl;
    s1.print_string();
return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值