2021-09-26 c++ 自定义Mystring类

//-------------------Mystring.h-----------------------------------------

#ifndef _MYstring_
#define _MYstring_
#include <iostream>
using namespace std;


class Mystring
{public:
    Mystring(const char * str);//构造函数
    Mystring(const Mystring& str);//拷贝构造函数
    Mystring& operator =(const Mystring& str);//拷贝赋值函数
    ~Mystring();
    char* get_c_str() const { return m_data; }
    friend ostream& operator<< (ostream& out,const Mystring& str);
    bool operator ==(const Mystring& str);
private:
    char * m_data;
    int m_size;
};

#endif

//------------------------Mystring.cpp----------------------------------------

#include <stdio.h>
//#include "Mystring.h"
int Mystrlen(const char *str)
{  assert(str!=NULL)
    int len=0;
    while(*str!='\0'){str++;len++ ;}
    return len;
}

char * Mystrcpy(char *dest, const char *source)
{ assert(dest!=NULL && source!=NULL) ;
  char *p=dest;
  while(*source!=0)
  {*dest=*source;
    dest++;
    source++;
  }

 *dest=0;
  return p;
}

int Mystrcmp(const char *a, const char *b)
{  assert(a!=NULL && b!=NULL) ;
    while(*a!=0 && *b!=0)
    {
        if (*a!=*b) return (*a > *b)? 1:-1;

        else
        {
        b++;
        a++;
        }
    }

    return 0;
}
Mystring::Mystring(const char *str)
{
    if(str!=0)
    {
        m_size=Mystrlen(str);
        m_data=new char[m_size+1];
        Mystrcpy(m_data,str);
    }
    else
    {   m_data=new char[1];
        *m_data='\0' ;
        m_size=0;
    }
}
Mystring::Mystring (const Mystring& str)
{
   m_size=str.m_size;
   m_data=new char[m_size+1];
   Mystrcpy(m_data,str.m_data);
}
Mystring::~Mystring()
{
    delete[] m_data;
}
Mystring & Mystring::operator =(const  Mystring &  str)
{
    if(&str == this)
    {return *this;
    }
    else
    {
        delete[] m_data;
        m_size=Mystrlen(str.m_data);
        m_data=new char[m_size+1];
        Mystrcpy(m_data,str.m_data);
        return *this;
    }
}
ostream& operator<< (ostream& os,const Mystring& str)
{
if(str.m_data!=NULL)
os<<str.m_data;
return os;
}
bool Mystring:: operator ==(const Mystring& str)
{   if(&str == this)
    {return true;
    }
    else
    {
        return (0==Mystrcmp(m_data,str.m_data));
    }
}

//---------------------Main.cpp------------------------------------------

//#include "Mystring.h"
#include <string.h>
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
    Mystring t1("hello");
    std::cout<<t1<<std::endl;
    Mystring t2=t1;
    std::cout<<t2<<std::endl;
    Mystring t3(t2);
    std::cout<<t3<<std::endl;
    cout<<(t1 ==t2);
    Mystring t4("Jack-Ma");
    cout<<(t1 ==t4)<<std::endl;
    getchar();
    return 0;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值