OJ链接:替换空格
题目描述
- 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
- 因替换内容比被替换内容长,所以,一定涉及到字符串中字符的移动问题,移动方向一定是向后移动,所以现在的问题是移动多少的问题。
- 因为是 ' ' -> "%20",是1换3,所以可以先统计原字符串中空格的个数(设为n),然后可以计算出新字符串的长度 new_length = old_length + 2*n
- 最后,定义新旧索引(或者指针),各自指向新旧空间的结尾,然后进行old->new的移动。如果是空格,就连续放入“%20”,其他平移即可。
代码
class Solution {
public:
void replaceSpace(char *str,int length) {
int count=0;
char* start=str;
while(*start)//求出所有空格数
{
if(isspace(*start))
count++;
start++;
}
char* old_end=str+length;//老字符串长度
char* new_old=str+length+2*count;//新字符串长度
while(old_end>=str && new_old>=str)
{
if(!isspace(*old_end))//当前位置不是空格,平移即可
{
*new_old=*old_end;
new_old--;
old_end--;
}
else//当前位置是空格
{
*new_old--='0';
*new_old--='2';
*new_old--='%';
old_end--;
}
}
}
};