替换空格
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:如果直接是遇到空格就替换,因为替换的数量是三,而空格的数量是一,这样替换后面的字符串都得移动,效率比较低,不如从后往前来做替换。
C++程序
class Solution {
public:
void replaceSpace(char *str,int length) {
//遍历一遍,找出空格的数量,空格长度是1,替换长度是3
if(str == NULL || length < 0)
return ;
int i = 0;
int oldnumber = 0; //记录之前的字符串长度
int replacenumber = 0; //记录空格的数量
while(str[i] != '\0')
{
oldnumber ++;
if(str[i] == ' ')
{
replacenumber ++;
}
i ++;
}
int newlength = oldnumber + replacenumber * 2 ; //插入后的长度
if(newlength > length) //如果计算后的长度大于总长度就无法插入
return ;
int pOldlength = oldnumber; //注意不要减一,因为隐藏着'\0'也要算进去
int pNewlength = newlength;
while(pOldlength >= 0 && pNewlength > pOldlength)
{
if(str[pOldlength] == ' ')//碰到空格就换
{
str[pNewlength --] = '0';
str[pNewlength --] = '2';
str[pNewlength --] = '%';
}
else
{
str[pNewlength --] = str[pOldlength]; //不是空格就把pOldlength 指向的字符装入pNewlength指向的位置
}
pOldlength --; //不管是if还是else都要把pOldlength前移
}
}
};