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

83 篇文章 0 订阅

    在做字符串解析时,有时候需要去掉字符串的首部、尾部空格,同时将中间连续的空格压缩为一个。在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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值