#include
#include
#include
using namespace std;
class Cstring
{
public:
Cstring();
Cstring(const char* str);
Cstring(const Cstring &other);
~Cstring();
public:
Cstring operator+(const char *lpszText);
Cstring operator+(const Cstring &other);
Cstring& operator+=(const char *lpszText);
Cstring& operator+=(const Cstring &other);
Cstring& operator=(const char *lpszText);
Cstring& operator=(const Cstring &other);
friend ostream & operator << (ostream &os, Cstring &str)
{
os<
return os;
}
friend istream & operator >> (istream &is, Cstring &str)
{
char buf [1024] = { 0 };
is>>buf;
str = buf;
return is;
}
private:
char *str;
int size;
};
Cstring::Cstring()
{
size = 140;
str = new char[size];
memset(str, 0, sizeof(char)*size);
}
Cstring::Cstring(const char* str)
{
assert(str);
size = strlen(str)*2 + 1;
this->str = new char[size];
memcpy(this->str, str, strlen(str) + 1);
}
Cstring::Cstring(const Cstring &other)
{
size = other.size;
this->str = new char[size];
memcpy(this->str, other.str, size);
}
Cstring::~Cstring()
{
if(str) delete str;
size = 0;
}
Cstring Cstring::operator+(const char *lpszText)
{
int nLen = strlen(lpszText) + strlen(this->str) + 1;
Cstring str = *this;
str += lpszText;
return str;
}
Cstring Cstring::operator+(const Cstring &other)
{
int nLen = strlen(other.str) + strlen(this->str) + 1;
Cstring str = *this;
str += other.str;
return str;
}
Cstring& Cstring::operator+=(const char *lpszText)
{
int nLen = strlen(lpszText) + 1;
if (this->size < strlen(this->str) + nLen)
this->str = (char*)realloc(this->str, (this->size) = 2 * (strlen(this->str) + nLen));
strcat(this->str, lpszText);
return *this;
}
Cstring& Cstring::operator+=(const Cstring &other)
{
int nLen = strlen(other.str) + 1;
if (this->size < strlen(this->str) + nLen)
this->str = (char*)realloc(this->str, (this->size) = 2 * (strlen(this->str) + nLen));
strcat(this->str, other.str);
return *this;
}
Cstring& Cstring::operator=(const char *lpszText)
{
int nLen = strlen(lpszText) + 1;
if(this->size < nLen)
{
delete this->str;
this->size = nLen * 2;
this->str = new char[size];
}
strcpy(this->str, lpszText);
return *this;
}
Cstring& Cstring::operator=(const Cstring &other)
{
int nLen = strlen(other.str) + 1;
if (this->size < nLen)
{
delete this->str;
this->size = nLen * 2;
this->str = new char[size];
}
strcpy(this->str, other.str);
return *this;
}
Cstring operator+(const char *lpszText, Cstring &other)
{
Cstring str = lpszText;
str += other;
return str;
}
int main()
{
// Cstring s1("is a wondful ");
// Cstring s2("programming Language!");
// Cstring s3;
// s3 = " C++ " + (s1 + s2);
// Cstring s1("C++ is a wondful ");
// Cstring s2("programming ");
// Cstring s3;
// s3 = (s1 + s2) + " Languages! ";
Cstring s1("C++ is a wondful ");
Cstring s2(" Languages! ");
Cstring s3;
s3 = s1 + " programming " + s2;
cout<
cout<
cout<
return 0;
}