题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
#include<iostream>
#include<vector>
#include<string>
using namespace std;
void replaceSpace(char *str,int length) {
if (str == NULL || length == 0) {
return;
}
int spaceNum = 0;
int oraginalLength = 0;
for (oraginalLength = 0; str[oraginalLength] != '\0'; oraginalLength++) {
if (str[i] == ' ') {
spaceNum = spaceNum + 1;
}
}
int lengthNew = oraginalLength + spaceNum * 2;
if (lengthNew > length) {
return;
}
str[lengthNew] = '\0'; //此行很重要,因为原字符串最后一个字符为'\0',没有会报错
for (int i = oraginalLength - 1, j = lengthNew - 1; i >= 0 && i < j; i--) {
if (str[i] != ' ') {
str[j--] = str[i];
} else {
str[j--] = '0';
str[j--] = '2';
str[j--] = '%';
}
}
}
int main(){
char a[50] = " helloworld ";
replaceSpace(a, 50);
return 0;
}
这个题最开始我很自然而然的想到了如果是每次都去找一个空格然后就去移动一次,这样子太麻烦了,并且后面的字符可能会多次移动,可不可以把所有的空格都找出来然后一次性把他移动完,这大概就是这道题的大致解题方式。当然也有一些基础的编程知识点需要注意:
1、这里的length指的是字符串能够容纳的长度,如果超出了这个长度,是不行的!
2、这里str指针指向是一个字符串数组变量,如果是常量是不允许操作的。