/******************************
* string.h
*************/
class CString
{
private:
char *str;
public:
CString(char *s);
CString(const CString &st);
~CString();
int strlen() const;
CString operator +(const CString &s);
CString &operator +=(const CString &s);
CString &operator =(const CString &s);
bool operator==(const CString &s);
};
/******************************
* string.cpp
*************/
#include "String.h"
CString::CString(char *s)
{
int len=::strlen(s);
str=new char[len+1];
memcpy(str,s,len+1);
}
CString::CString(const CString &st)
{
int len=::strlen(st.str);
str=new char[len+1];
memcpy(str,st.str,len+1);
}
CString::~CString()
{
if (str) delete[] str;
str=NULL;
}
int CString::strlen() const
{
return ::strlen(str);
}
CString& CString::operator +=(const CString &s)
{
int len1=strlen(),len2=s.strlen();
char* tStr=str;
str=new char[len1+len2+1];
memcpy(str,tStr,len1);
delete[] tStr;
memcpy(str+len1,s.str,len2);
str[len1+len2]=0;
return *this;
}
CString CString::operator +(const CString &s)
{
int len1=strlen(),len2=s.strlen();
char* retstr = new char[len1+len2+1];
memcpy(retstr,str,len1);
memcpy(retstr+len1,s.str,len2);
retstr[len1+len2]=0;
CString ret(retstr);
delete[] retstr;
return ret;
}
CString& CString::operator =(const CString &s)
{
if (str) delete[] str;
int len=s.strlen();
str=new char[len+1];
memcpy(str,s.str,len+1);
return *this;
}
bool CString::operator==(const CString &s)
{
int i=0;
while (str[i] && s.str[i])
{
if (str[i]!=s.str[i])
return false;
i++;
}
return str[i]==0 && s.str[i]==0;
}