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();
}