题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
这种题目从前往后扫描的话,需要移动多次,
这种情况下从后往前扫描。
首先扫描一遍,找到空格的个数,算出需要添加多少个20%,即替换后的字符串的长度 = 原字符串长度 + 空格数*2
准备两个指针一个指针p1指向当前字符串的最后位置,另一个指针p2指向新字符串的最后位置。
然后依次向前扫描,当遇到空格的时候,p1向前移动一个位置,p2向前移动三个位置,并且依次用20%替换。
代码实现
class Solution {
public://注意:length是整个字符串的总容量 包括未占用的空间
void replaceSpace(char *str, int length) {
//首先判断边界条件,如空啥的
if (str == nullptr || length <= 0)
return;
int originLen = 0;
int numOfblank = 0;
int i = 0;
while (str[i] != '\0')
{
originLen++;
if (str[i] == ' ')
numOfblank++;
i++;
}
int newLen = originLen + numOfblank * 2;
if (newLen > length)
return;
while (originLen >= 0 && newLen > originLen)
{
if (str[originLen] == ' ')
{
str[newLen--] = '0';
str[newLen--] = '2';
str[newLen--] = '%';
}
else
str[newLen--] = str[originLen];
originLen--;
}
}
};