将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) 去掉首部、尾部的空格,并压缩中间的连续空格

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里的连续字符串压缩为一个的主要内容,如果未能解决你的问题,请参考以下文章

将CString里的连续字符串压缩为一个

数据链路层

STL:list用法总结

iOS去除字符串首尾空格或某字符

急!!IP数据报必须考虑最大传送单元MTU,这是指哪一层的最大传送单元?包括不包括首部或尾部等开销在内?

计算机网络概述---数据链路层