问题描述
把字符串中每个空格用%20
替换
考察知识点
- 字符串编程能力
- 内存覆盖
解题思路
原字符串操作时,要考虑内存覆盖问题,即一个\0
要被%
,2
,0
三个字符替换。从后往前,遇到空格时,新字符串增加两个字符长度后用%20
替换空格即可。
完整C++代码
/*02_replacespace*/
#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
void replaceSpace(char *str, int length)
{
if (str == NULL || length <= 0)return;//判空
int numberofblank = 0;
for (int i = 0; i < length; i++)//遍历一遍str,计算空格个数
{
if (str[i] == ' ')
numberofblank++;
}
int newlength = length + 2 * numberofblank;
int numberoforigin = length;
int numbernewstr = newlength;
while (numberoforigin >= 0 && numbernewstr >= numberoforigin)//从后往前,旧字符串遇空新字符串往前加20%
{
if (str[numberoforigin] != ' ')
{
str[numbernewstr--] = str[numberoforigin];
}
else
{
str[numbernewstr--] = '0';
str[numbernewstr--] = '2';
str[numbernewstr--] = '%';
}
--numberoforigin;
}
}
};
int main()
{
Solution s;
char p[20] = "we are happy." ;
char *str = p;
s.replaceSpace(str, 14);
int length = strlen(str);
for (int i=0; i < length; i++)
{
cout << str[i] ;
}
cout << endl;
return 0;
}
编写代码遇到的问题
- 字符串的编写问题
刚开始给 char *str 直接赋值,然后调用replacespace方法时,报错实参和形参不符。查找原因:const char*
类型的值不能用于初始化char *
类型的实体。然后修改如下:
char p[20] = "we are happy." ;
char *str = p;