新浪面试题:删除字符串中多余的空格
给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。
比如 “ I like http://hi.baidu.com/mianshiti ” 会变成 "I like http://hi.baidu.com/mianshiti"。
笔者有以下疑问,忘大师指点:若函数的参数是一个string类型怎么做?中途是否一定要通过字符数组来转换。
下面是我编写的程序:
#include <iostream>
using namespace std;
void removeExtraSpace(char*str)
{
if (str ==NULL)
return;
char *p =str;
boolafter_char_space = false; //是否字符之后的空格
int neworder= 0;
while(*p !=NULL)
{
if(*p!=' ') //不为空
{
str[neworder++] = *p;
after_char_space = true;
}
else if(after_char_space) //字符后的空
{
str[neworder++] = *p;
after_char_space = false;
}
p++;
}
if(str[neworder-1]== ' ')
str[neworder-1] = '\0';
else
str[neworder] = '\0';
}
int main()
{
char str[] =" I like liuxi ";
removeExtraSpace(str);
cout<<"变化后为"<<str<<"测试最后的空格是否删除"<<endl;
system("pause");
return 0;
}
其他一些程序参考,思路类似
voidremoveExtraSpace(char* str)
{
bool keep_space = false;
int new_str_end = 0;
for (int i = 0; str[i]; ++i)
{
if (str[i] != ' ')
{
str[new_str_end++] = str[i];
keep_space = true;
} else if (keep_space)
{
str[new_str_end++] = str[i];
keep_space = false;
}
}
if (new_str_end > 0 &&str[new_str_end - 1] == ' ')
{
str[new_str_end - 1] = '\0';
} else
{
str[new_str_end] = '\0';
}
}
voidremoveExtraSpace(char *str)
{
char *head;
int count=0,p=0,len = strlen(str);
head = str;
while(*str)
{
if(count>0 && count<len-1)
{
if(*str != ' ')
{
head[p] = *str;
p++;
}
if(*str == ' ' && *(str+1)!= ' ')
{
head[p] = *str;
p++;
}
}
str++;
count++;
}
head[p]='\0';
}