字符串操作(一)

代码片段,来源于Arcemu开源项目。

 

(1)切分

using namespace std;

vector<string> StrSplit(const string & src, const string & sep)
{
	vector<string> r;
	string s;
	for(string::const_iterator i = src.begin(); i != src.end(); i++)
	{
		if(sep.find(*i) != string::npos)
		{
			if(s.length()) r.push_back(s);
			s = "";
		}
		else
		{
			s += *i;
		}
	}
	if(s.length()) r.push_back(s);
	return r;
}


(2)编码转换

 

// win32 only
// cebernic added it
// for multilanguage supports
// --------------------------------------------------------------------------------------------------
SERVER_DECL const char* _StringToUTF8(const char*   pASCIIBuf)
{
#ifdef WIN32
	DWORD     UniCodeLen = MultiByteToWideChar(CP_ACP,   0,   pASCIIBuf,   -1,   0,   0);
	std::vector <wchar_t>   vWCH(UniCodeLen);
	MultiByteToWideChar(CP_ACP,   0,   pASCIIBuf,   -1,   &vWCH[0],   UniCodeLen);
	DWORD   dwUtf8Len = WideCharToMultiByte(CP_UTF8,   0,   &vWCH[0],   UniCodeLen   ,   NULL,   NULL,   NULL,   NULL);
	ASSERT(dwUtf8Len + 1 < 2048);
	memset(_StringConversionStorage, 0, (sizeof(char)*dwUtf8Len) + 1);
	WideCharToMultiByte(CP_UTF8,   0,   &vWCH[0],   UniCodeLen   ,   _StringConversionStorage,   dwUtf8Len,   NULL,   NULL);
	return &_StringConversionStorage[0];
#else
	return &pASCIIBuf[0];
#endif
}
SERVER_DECL const char* _StringToANSI(const char*   pUtf8Buf)
{
#ifdef WIN32
	DWORD   UniCodeLen = MultiByteToWideChar(CP_UTF8,   0,   pUtf8Buf,   -1,   NULL, 0);
	std::vector <wchar_t>   vWCH(UniCodeLen);
	MultiByteToWideChar(CP_UTF8,   0,   pUtf8Buf,   -1,   &vWCH[0]   ,   UniCodeLen);
	DWORD   dwASCIILen = WideCharToMultiByte(CP_ACP,   0,   &vWCH[0],   UniCodeLen   ,   NULL   , NULL   ,   NULL,   NULL);
	ASSERT(dwASCIILen + 1 < 2048);
	memset(_StringConversionStorage, 0, (sizeof(char)*dwASCIILen) + 1);
	WideCharToMultiByte(CP_ACP,   0,   &vWCH[0],   UniCodeLen   ,   _StringConversionStorage,   dwASCIILen,   NULL,   NULL);
	return &_StringConversionStorage[0];
#else
	return &pUtf8Buf[0];
#endif
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值