// String.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
template<typename Ty>
class CMyString
{
public:
typedef unsigned size_t;
typedef Ty valuetype;
enum{
MAX_LENGHT = 1000
};
private:
size_t m_uCout;
Ty m_Buf[MAX_LENGHT];
public:
CMyString();
~CMyString();
CMyString(const Ty* str);
CMyString(const CMyString<Ty>& other);
CMyString& operator =(const CMyString<Ty>& other);
CMyString& operator +=(const CMyString<Ty>& other);
CMyString operator +(const CMyString<Ty>& other);
CMyString& operator -=(const CMyString<Ty>& other);
CMyString operator -(const CMyString<Ty>& other);
public:
size_t size()
{
return m_uCout;
}
const Ty* c_str() const
{
return m_Buf;
}
private:
size_t mylen(const Ty* str)
{
if(NULL == str)
return 0;
size_t size = 0;
while(*(str + size) != 0)
{
++size;
}
return size;
}
void mycpy(Ty* des,size_t size,const Ty* res)
{
size_t tmp = 0;
while(tmp<= size && *(res + tmp) != 0)
{
*(des + tmp) = * (res + tmp);
tmp++;
}
*(des + tmp) = 0;
}
void mycat(Ty* des,size_t size,const Ty* res)
{
size_t i = 0;
while(*(des + i) != 0)
{
i++;
}
size_t j = 0;
while (*(res + j) != 0)
{
*(des + i + j) = *(res + j);
j++;
}
*(des + i + j) = 0;
}
};
//默认构造函数
template<typename Ty>
CMyString<Ty>::CMyString()
{
*m_Buf = 0;
m_uCout = 0;
}
//析构函数
template<typename Ty>
CMyString<Ty>::~CMyString()
{
}
//a("a")
template<typename Ty>
CMyString<Ty>::CMyString(const Ty* other)
{
if(other == NULL)
{
*m_Buf = 0;
m_uCout = 0;
}
else
{
m_uCout = mylen(other);
mycpy(m_Buf,m_uCout,other);
}
}
//a(b)
template<typename Ty>
CMyString<Ty>::CMyString(const CMyString<Ty>& other):m_uCout(other.m_uCout)
{
mycpy(m_Buf,m_uCout,other.m_Buf);
}
//c=b
template<typename Ty>
CMyString<Ty>& CMyString<Ty>::operator = (const CMyString<Ty>& other)
{
m_uCout = other.m_uCout;
mycpy(m_Buf,m_uCout,other.m_Buf);
return *this;
}
//c+=b
template<typename Ty>
CMyString<Ty>& CMyString<Ty>::operator +=( const CMyString<Ty> &other)
{
m_uCout += other.m_uCout;
mycat(m_Buf,other.m_uCout,other.m_Buf);
return *this;
}
typedef CMyString<char> cstring;
int _tmain(int argc, _TCHAR* argv[])
{
cstring a("aaa");
cstring b(a);
cstring c = b;
c = "ccc";
c.c_str();
cstring d = "ddd";
d += c;
d += "abcde111";
return 0;
}
//
#include "stdafx.h"
template<typename Ty>
class CMyString
{
public:
typedef unsigned size_t;
typedef Ty valuetype;
enum{
MAX_LENGHT = 1000
};
private:
size_t m_uCout;
Ty m_Buf[MAX_LENGHT];
public:
CMyString();
~CMyString();
CMyString(const Ty* str);
CMyString(const CMyString<Ty>& other);
CMyString& operator =(const CMyString<Ty>& other);
CMyString& operator +=(const CMyString<Ty>& other);
CMyString operator +(const CMyString<Ty>& other);
CMyString& operator -=(const CMyString<Ty>& other);
CMyString operator -(const CMyString<Ty>& other);
public:
size_t size()
{
return m_uCout;
}
const Ty* c_str() const
{
return m_Buf;
}
private:
size_t mylen(const Ty* str)
{
if(NULL == str)
return 0;
size_t size = 0;
while(*(str + size) != 0)
{
++size;
}
return size;
}
void mycpy(Ty* des,size_t size,const Ty* res)
{
size_t tmp = 0;
while(tmp<= size && *(res + tmp) != 0)
{
*(des + tmp) = * (res + tmp);
tmp++;
}
*(des + tmp) = 0;
}
void mycat(Ty* des,size_t size,const Ty* res)
{
size_t i = 0;
while(*(des + i) != 0)
{
i++;
}
size_t j = 0;
while (*(res + j) != 0)
{
*(des + i + j) = *(res + j);
j++;
}
*(des + i + j) = 0;
}
};
//默认构造函数
template<typename Ty>
CMyString<Ty>::CMyString()
{
*m_Buf = 0;
m_uCout = 0;
}
//析构函数
template<typename Ty>
CMyString<Ty>::~CMyString()
{
}
//a("a")
template<typename Ty>
CMyString<Ty>::CMyString(const Ty* other)
{
if(other == NULL)
{
*m_Buf = 0;
m_uCout = 0;
}
else
{
m_uCout = mylen(other);
mycpy(m_Buf,m_uCout,other);
}
}
//a(b)
template<typename Ty>
CMyString<Ty>::CMyString(const CMyString<Ty>& other):m_uCout(other.m_uCout)
{
mycpy(m_Buf,m_uCout,other.m_Buf);
}
//c=b
template<typename Ty>
CMyString<Ty>& CMyString<Ty>::operator = (const CMyString<Ty>& other)
{
m_uCout = other.m_uCout;
mycpy(m_Buf,m_uCout,other.m_Buf);
return *this;
}
//c+=b
template<typename Ty>
CMyString<Ty>& CMyString<Ty>::operator +=( const CMyString<Ty> &other)
{
m_uCout += other.m_uCout;
mycat(m_Buf,other.m_uCout,other.m_Buf);
return *this;
}
typedef CMyString<char> cstring;
int _tmain(int argc, _TCHAR* argv[])
{
cstring a("aaa");
cstring b(a);
cstring c = b;
c = "ccc";
c.c_str();
cstring d = "ddd";
d += c;
d += "abcde111";
return 0;
}