将CString里的连续字符串压缩为一个
Posted sanqima
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将CString里的连续字符串压缩为一个相关的知识,希望对你有一定的参考价值。
在做字符串解析时,有时候需要去掉字符串的首部、尾部空格,同时将中间连续的空格压缩为一个。在MFC中,借助CString的库函数TrimLeft()、TrimRight(),分别可以去掉首部、尾部的空格,对于中间的字符串空格,则需要手动编写函数来处理。
比如,字符串A = " 100 300 500 888 666 ",要将字符串A的首部100前面的空格、尾部666后面的空格都去掉,同时,需要将子串“100 300”里中间的2个空格压缩为1个,"500 888"里中间的3个空格压缩为1个,并实现如下图(1)效果:
1、 压缩连续空格的核心函数
//CompressString
//--- CompressString函数的作用:
// 压缩字符串中间的连续空格,
// 并去掉头尾部的空格
CString CompressString(const CString& strSrc, const CString& strFlag)
if (strSrc.IsEmpty())
return _T(""); //返回空字符串
CString strLine = strSrc;
strLine.TrimLeft(); //去掉字符串的头部空格
strLine.TrimRight(); //去掉字符串的尾部空格
int begPos(0), endPos(0);
CString temp, strRes;
while (1)
endPos = strLine.Find(strFlag, begPos);
if (-1 == endPos)
break;
temp = strLine.Mid(begPos, endPos - begPos);
temp.Replace(strFlag, _T("")); //去掉当前子串里的所有空格
if (temp.GetLength() > 0)
strRes += temp + strFlag;
begPos = endPos + strFlag.GetLength();
temp = strLine.Right(strLine.GetLength() - begPos);
strRes += temp;
return strRes;
2、调用方式
//CallFunc()
void CallFunc()
CString strText = _T(" 100 300 500 888 666 ");
CString strDst = CompressString(strText, _T(" "))+_T("\\r\\n");
OutputDebugString(strDst);
3、 完整工程
本工程是VS2015工程,类型为C++ MFC对话框项目,如下:
MFC CString连续空格压缩的工程 https://download.csdn.net/download/sanqima/86400110
以上是关于将CString里的连续字符串压缩为一个的主要内容,如果未能解决你的问题,请参考以下文章