面试题五 替换空格
题目:实现一个函数,把字符串中的每个空格替换成“%20”,例如,输入“We are family”,则输出“We %20are%20family”.
思路:如果字符串所占空间足够长,则考虑从后往前复制,首先计算出替换空格后的长度,然后同步复制,在空格处复制为%20。
代码:
#include<stdio.h>
#include<iostream>
using namespace std;
int replaceSpace(char arr[]);
int main() {
char arr[100] = { " we are family!" };
replaceSpace(arr);
cout << "result:" << arr << endl;
return 0;
}
int replaceSpace(char arr[]) {
if (arr == nullptr) {
return -1;
}
int length = 0, count = 0;
for (int i = 0; arr[i] != '\0'; i++) {
length++;
if (arr[i] == ' ') {
count++;
}
}
int newLength = length + 2 * count;
char* p1 = arr + length;
char* p2 = arr + newLength;
while (p1 >= arr) {
if (*p1 != ' ') {
*p2-- = *p1--;
}
else {
*p2-- = '0';
*p2-- = '2';
*p2-- = '%';
p1--;
}
}
return 0;
}