//-------------------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;
}