背景:
是这样的,最近做了一个小项目:要做一个中间软件,将别的软件上导出的数据上传到公司内部的OA系统上,但是我看到导出的文本有很多空格,格式不一样,我就想着将同一行的所有字符串的连续空格用一个空格去代替,这样就方便了我以后的查找以及数据的存储。
所以我自己小小的封装了一个函数,大家如果有跟我一样的问题,可以参考参考。
#include<CString>
#include<string>
//....包含头文件
//还要注意的一点是在项目的属性中将字符集改成未设置,这样就不会报错了
/****************************************************************************************
* Function: SpaceReplace(CString& str)
* input: str-需要转化的字符串
* output: str-转化后的字符串
* comment: 将字符串str中所有连续空格都替换成一个空格
*****************************************************************************************/
void CMotorUploadingOADlg::SpaceReplace(CString& str)
{
int count = 0; //记录偏移位数
int spaceCount = 0; //记录空格长度
bool canReplace = false; //是否可以替换开关
string tempStr = str.GetBuffer(0); //字符转化
char* c = str.GetBuffer(0); //字符指针,用于偏移查找空格
while (*c != '\0')
{
c++;
count++;
if (*c == ' ')
{
//如果找到了空格,个数加一
spaceCount++;
if (spaceCount > 1)
{
//当空格数大于1,才可以替换
canReplace = true;
}
continue;
}
if (canReplace)
{
count = count - spaceCount;
//将从count开始的spaceCount个字符串用1个空格取代
tempStr.replace(count, spaceCount, 1, ' ');
canReplace = false;
//因取代了一个空格,所以需要多偏移一位
count++;
}
spaceCount = 0;
}
str = tempStr.c_str();
}
//然后在某个地方调用就好了
{
//函数体内
//随便输入一个字符串
CString contentRow=" a sdzxc asd qweqweq";
//先去掉字符串首尾的空格
contentRow.Trim();
//将字符串里面的多个连续空格转化成一个空格
SpaceReplace(contentRow);
// 输出 contentRow="a sdzxc asd qweqweq"
}
当然可以有更好的方式,我这种有点笨笨的,主要是这种自己解决问题的能力,我都是一步步调试出来的,所以说学会调试代码还是很重要滴。