自己写string 字符串处理类。。。。。。。。。。。。。。

#ifndef  __YOUNG__BUFFER
#define __YOUNG__BUFFER
#include <stdio h="">
class YoungBuffer
{
protected: 
	char * m_pData;
public:
	YoungBuffer();
};
#endif
#include "YoungBuffer.h"
YoungBuffer::YoungBuffer():m_pData(NULL)
{
	
}
</stdio>
#ifndef  __YOUNG__STRING
#define __YOUNG__STRING
#include <stdarg.h>
#include <string>
#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
// YoungString.cpp : Defines the entry point for the console application.
//
#include <tchar.h>
#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<char*>(malloc((iNewLength + 1) * sizeof(char)));
			strcpy(m_pData, m_Buffer);
			strcat(m_pData, p_data);
		}
		else 
		{
			m_pData = static_cast<char*>(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);
	}
	else 
	{
		return strlen((const char*)m_pData);
	}
	//return strlen()
}
void YoungStringA::assign(const char* p_data, int iLen)
{
	if( p_data == NULL ) p_data = "";

	iLen = (iLen < 0 ? (int) strlen(p_data) : iLen);

	if( iLen < MAX_LOCAL_STRING_LEN ) 
	{
		if( m_pData != m_Buffer ) 
		{
			free(m_pData);
			m_pData = m_Buffer;
		}
	}
	else if( iLen > length() || m_pData == m_Buffer ) // 
	{
		if( m_pData == m_Buffer ) 
			m_pData = NULL;
		m_pData = (char*)realloc(m_pData, (iLen + 1) * sizeof(char));
	}
	memset(m_pData,0, iLen);
	strncpy(m_pData, p_data, iLen);
}
YoungStringA::YoungStringA(const char * sz)
{
	clear();
	assign(sz);
}
YoungStringA::YoungStringA(const char * sz,int iLen)
{
	clear();
	assign(sz,iLen);
}
YoungStringA::YoungStringA(YoungStringA& src)//拷贝构造函数
{
	assign(src.m_pData);
}

YoungStringA& YoungStringA::operator=(const char* p_data)
{
	if (p_data == NULL)
	{
		clear();
	}
	else
	{
		assign(p_data);
	}
	return *this;
}
YoungStringA& YoungStringA::operator=(string str)
{
	assign(str.c_str());
	return *this;
}
YoungStringA::operator char*()
{
	return m_pData;
}
YoungStringA::operator const char*()
{
	return m_pData;
}

//待扩充!!!!!

https://code.google.com/p/power-younglib


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值