char数组空格替换
题目:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
c++提供string字符串数据结构,我们可以比较方便的去替换
方法一:利用string的特性
void replaceSpace(char *str, int length) {
if (length <= 0) return;
string s = string(str);
string res;
for (auto x : s)
{
if (x == ' ')
res += "%20";
else
res += x;
}
strcpy(str, res.c_str());
}
方法二:从后往前遍历替换,重点是需要知道char数组的长度
void replaceReverse(char *str, int length)
{
//hello world
//从后向前遍历,如果碰到空格就增加两个空间插入%20
if (length <= 0) return;
int totallen = length;
int spaceCount = 0;
for (int i = 0; i < length; ++i)
{
if (str[i] == ' ') spaceCount++;
}
totallen += spaceCount * 2;//hello world; 11+1*2 = 13;
for (int j = length - 1; j >= 0 && j!=totallen; j--)
{
if (str[j] != ' ') str[--totallen] = str[j];
else
{
str[--totallen] = '0';
str[--totallen] = '2';
str[--totallen] = '%';
}
}
}