请实现一个函数,将一个字符串中的每个空格替换成“%20”。 例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Happy。
面试题中所给的函数头是:
void replaceSpace(char *str,int length)
char* str 则是题目所给的字符串,而长度呢,应该就是可以存储的最大长度。如果是字符串常量那就没办法扩容,而且给length 也就没有意义了,因为我们用strlen()就可以求出长度了。
思路:
1.我们先求出现在为改变时字符串的长度,在遍历中求出空格的长度从而算出改变后的长度,如果长度>length则替换失败。
2.然后遍历找空格进行空格的替换,首先要把空格后的字符依存后移,给%20挪出空间记住只需要挪动两个空间,因为%号替换空格就可以了
cur 遍历用,oldlength原字符串长度,blanklength空格长度
end 挪动数据时要从最后一位开始挪,所以end标志的最后一位的位置。\0也要挪哦~
class Solution {
public:
void replaceSpace(char *str,int length) {
int oldlength = 0;
char* cur = str;
int blanklength = 0;
while(cur[oldlength] != '\0')
{
if(cur[oldlength]==' ')
blanklength++;
oldlength++;
}
if(oldlength + 1 + blanklength*2 > length)
return;
cur = str;
char* end = str + oldlength;
int i = 0;
while(cur[i] != '\0')
{
if(cur[i] == ' ')
{
cur[i]='%';
char* pushflort = end;
while(pushflort > cur + i)
{
*(pushflort+2) = *pushflort;
pushflort--;
}
end += 2;
cur[++i] = '2';
cur[++i] = '0';
}
i++;
}
}
};