自己写string 字符串处理类(一)

2014-11-24 11:59:56 ? 作者: ? 浏览: 75
[cpp]
#ifndef __YOUNG__BUFFER
#define __YOUNG__BUFFER
#include
class YoungBuffer
{
protected:
char * m_pData;
public:
YoungBuffer();
};
#endif
#include "YoungBuffer.h"
YoungBuffer::YoungBuffer():m_pData(NULL)
{
}
[cpp]
#ifndef __YOUNG__STRING
#define __YOUNG__STRING
#include
#include
#define MAX_LOCAL_STRING_LEN 256
using namespace std;
class YoungString:public YoungBuffer
{
public:
virtual void clear() = 0;
virtual int length() = 0;
virtual void assign(const char* p_data, int iLen = -1) = 0;
virtual void append(const char* p_data) = 0;
virtual void upper() =0;
virtual void lower() = 0;
virtual int __cdecl Format(char* pstrFormat, ...) = 0;
};
class YoungStringA:public YoungString
{
protected:
bool m_bWideChar;
char m_Buffer[MAX_LOCAL_STRING_LEN + 1];//因为需要\0结尾,所以长度+1
protected:
char* GetPtr(const char *p_data,bool bAppend);
public:
int __cdecl Format(char* pstrFormat, ...);
void upper();
void lower();
void clear();
int length();
void assign(const char* p_data, int iLen = -1);
void append(const char *p_data);
YoungStringA(const char * p_data = NULL);
YoungStringA(const char * p_data,int iLen);
YoungStringA(YoungStringA& src);
operator char *() ;
operator const char *() ;
YoungStringA& operator=(const char * p_data);
YoungStringA& operator=(string str);//YoungString operator=(string str); 区别 是否调用拷贝构造函数
};
#endif
[cpp]
// YoungString.cpp : Defines the entry point for the console application.
//
#include
#include "YoungBuffer.h"
#include "YoungString.h"
int YoungStringA::Format(char* pstrFormat, ...)
{
YoungStringA sFormat = pstrFormat;
// Do ordinary printf replacements
// NOTE: Documented max-length of wvsprintf() is 1024
char szBuffer[1025] = { 0 };
va_list argList;
va_start(argList, pstrFormat);
int iRet = vsprintf(szBuffer, sFormat, argList);
va_end(argList);
assign(szBuffer);
return iRet;
}
void YoungStringA::clear()
{
m_pData = NULL;
memset(m_Buffer, 0, MAX_LOCAL_STRING_LEN+1);
}
void YoungStringA::append(const char *p_data)
{
int iNewLength = length() + (int) strlen(p_data);
if( iNewLength >= MAX_LOCAL_STRING_LEN )
{
if( m_pData == m_Buffer )
{
m_pData = static_cast(malloc((iNewLength + 1) * sizeof(char)));
strcpy(m_pData, m_Buffer);
strcat(m_pData, p_data);
}
else
{
m_pData = static_cast(realloc(m_pData, (iNewLength + 1) * sizeof(char)));
strcat(m_pData, p_data);
}
}
else
{
if( m_pData != m_Buffer )
{
free(m_pData);
m_pData = m_Buffer;
}
strcat(m_Buffer, p_data);
}
}
void YoungStringA::upper()
{
strupr(m_pData);
}
void YoungStringA::lower()
{
strlwr(m_pData);
}
int YoungStringA::length()
{
if (m_bWideChar)
{
return wcslen((const wchar_t*)m_pData);
-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: