字符串分割为字符串数组 去除前后指定字符

CString分割字符串为字符数组

str:为源字符串

strArr:为分割后的字符串数组

split:为分割条件

例如:str="123;456;789;abc"; split = ";";,strArr中就会保存成[123][456][789][abc]四个字符串
int SplitCString(CString str, CStringArray& strArr,LPTSTR split = _T("\r\n"))
{
	CString strLeft; 
	int nCurPos = 0; 

	strArr.RemoveAll();//清空结果 

	if (str.IsEmpty() || str.GetLength() <= 0) 
	{ 
		return 0; 
	} 

	strLeft = str.Tokenize(split,nCurPos);
	while (strLeft != _T("")) 
	{ 
		strArr.Add(strLeft);
		strLeft = str.Tokenize(split,nCurPos); 
	} 
	return strArr.GetCount();
}


 

下面的是针对std::string std::wstring的操作

STRING是自己定义的字符串变量类型
#ifdef UNICODE
typedef std::wstring STRING;
#else
typedef std::string STRING;
#endif

清除字符串左侧指定字符
str:为源字符串
lpszTargets:要清除的字符串
假如lpszTargets=" \t\r\n"; 那么str字符串左侧的空格或者制表符或者回车换行将被清除掉
STRING TrimStringLeft(STRING &str, LPCTSTR lpszTargets)
{
	if(str.length() == 0)
	{
		return str;
	}

	str.erase(0,str.find_first_not_of(lpszTargets));
	return str;
}

清除字符串右侧指定字符串
STRING TrimStringRight(STRING &str , LPCTSTR lpszTargets)
{
	if(str.length() == 0)
	{
		return str;
	}

	str.erase(str.find_last_not_of(lpszTargets)+1);
	return str;
}

清除字符串两边指定的字符串
STRING TrimString(STRING &str, LPCTSTR lpszTargets)
{
	if(str.length() == 0)
	{
		return str;
	}

	str = TrimStringLeft(str,lpszTargets);
	str = TrimStringRight(str,lpszTargets);

	return str;
}

std::string 替换函数只能替换一处,而且使用起来还不方便,特对其进行了简单的处理,就能像其他字符串处理函数一样来使用了。
strBase:是源字符串
strOld:是源字符串中存在的要被替换的字符串
strNew:是新字符串,用来替换字符串中strOld的字符串
STRING StringReplace(STRING &strBase, STRING strOld, STRING strNew)  
{  
	STRING::size_type pos = 0;  
	STRING::size_type srcLen = strOld.size();  
	STRING::size_type desLen = strNew.size();  
	pos=strBase.find(strOld, pos);   
	while ((pos != STRING::npos))  
	{  
		strBase.replace(pos, srcLen, strNew);  
		pos=strBase.find(strOld, (pos+desLen));  
	}                                                                                                                       	return strBase;
} 


std::string字符串分割为字符串数组
str:为源字符串
strArr:为分割后的字符串数组
split:为指定的分割字符串
int SplitString(LPCTSTR str, STRINGARRAY &strArr,LPTSTR split /*= _T("\r\n")*/)
{
	STRING strSource;
	STRING strLeft;
	int nCurPos = 0;
	int nSubStrPos = 0;
	strSource = str;
	if (str == NULL||_tcslen(str) == 0)
	{
		return 0;
	}
	strSource = TrimString(strSource,_T(" \t\r\n"));
	nCurPos = strSource.find(split,nSubStrPos);
	strLeft = strSource.substr(nSubStrPos,nCurPos - nSubStrPos);


	while ((strLeft != _T("")) || (nCurPos != -1))
	{
		if (nCurPos == -1)
		{
			StrArr.push_back(strLeft);
			break ;
		}
		nSubStrPos = nCurPos +1;
		strLeft = TrimString(strLeft,_T(" \t\r\n"));
		StrArr.push_back(strLeft);
		nCurPos = strSource.find(split,nSubStrPos);
		strLeft = strSource.substr(nSubStrPos,nCurPos - nSubStrPos);
	}

	return StrArr.size();	
}



 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daiafei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值