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