// "baidu search engine" => "baidu search engine"
void EarseWhiteBlock(char *str){
if(str==NULL) return;
bool isWhiteBlock_last=false;//标记上一个字符是否是空格
int num=0;//记录连续空格的个数
char *ptr=str;//遍历字符串
int tailIndex=0;//记录当前已处理过的字符串的末尾索引
while(*ptr!='\0'){
//如果当前存在连续的空格,将下一个单词向前移动num-1个位置
if(num>1&&*ptr!=' '){
//第一次移动前,调整好移动的起点
if(isWhiteBlock_last){
tailIndex+=1;//跳过一个空格
num-=1;//共移动num-1个位置
isWhiteBlock_last=false;
}
str[tailIndex++]=*ptr;
++ptr;
continue;
}
//如果当前字符不是空格
if(*ptr!=' '){
//上一字符是否是空格,若是则恢复标记
if(isWhiteBlock_last){
num=0;
isWhiteBlock_last=false;
}
++ptr;
++tailIndex;
}
else{ //当前字符是空格
isWhiteBlock_last=true;
++num;
}
}
str[tailIndex]='\0';//形成新的字符串
}
问题描述:
给出一个字符串,字符串中若有连续空格将其只保留一个空格。
算法思想:
遍历字符串,记录连续出现字符串的个数num,然后将下一个单词向前移动num-1个位置,遍历过程中记录当前已处理好的字符串的末尾索引。
代码如下: