题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
实现思想
① 先统计空格的数量
②通过空格的数量计算需要将最后一个数据移动到数组的哪个位置
③从后往前移动数组中的数据,如果碰到空格就替换成%20
代码实现
#include <stdc++.h>
using namespace std;
class Solution {
public:
void replaceSpace(char *str,int length) {
int bank_number = 0;
int i;
for(i = 0; str[i] != '\0'; i++) //如果数组没写入数据,默认为‘\0’
{
if(str[i] == ' ')
bank_number++;
}
int total_number = i + 1 + bank_number * 2;
int pos = total_number - 1;
while(i >= 0)
{
if(str[i] != ' ')
{
str[pos--] = str[i];
}
else
{
str[pos--] = '0';
str[pos--] = '2';
str[pos--] = '%';
}
i--;
}
}
};
//main 函数
int main()
{
Solution S;
char str[20] = "we are happy";
cout << str << endl; //输入看一下str
S.replaceSpace(str, 100);
cout << str <<endl; //输出看一下函数外部数组也改变了
return 0;
}
运行截图
总结
void replaceSpace(char *str,int length)
中char型指针实际上传入的是main
函数中char str[20] = "we are happy";
的首地址,所以访问的时候可以用str[i]
进行访问
,并且退出replaceSpace函数之后,main函数中的str[ ]
数组中的数据也变了。for(i = 0; str[i] != '\0'; i++) //如果数组没写入数据,默认为‘\0’
如果数组后面没写人值,默认为\0- 解决替换空格本博客用到的思想是移动原数组,所以并没有增加其他的数组,减少了空间复杂度,
void replaceSpace(char *str,int length)
中的int length是指数组的总空间,所以在这没用到,题目当中也没有说明白此length的意义,所以导致很多人以为这是输入数组的长度,其实并不是。