您的位置:首页 > Web前端

剑指offer题4_替换空格

2018-01-05 19:35 357 查看

一.题目:

请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy”,则输出“We%20are%20happy”。

二.分析:

1.需要向面试官问清楚,是需要在原来字符串上做替换,还是创建新的字符串。若在原来字符串需要保证充足的内存空间。

2.假如是在原来字符串上做替换,思路是从字符串的后面开始复制和替换,需要准备两个指针。规律是,合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符串)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样可以减少移动的次数,从而提高效率。

三.答案:

#include <stdio.h>
#include <string.h>

void replace_blank(char* string, int length) {
if (string == NULL || length < 0) {
return;
}

int originalLength = 0, newLength = 0, blankNum = 0;

for (int i = 0; string[i] != '\0'; i++) {
if (string[i] == ' ') {
blankNum++;
}
originalLength++;
}

newLength = originalLength + blankNum * 2;

if (newLength > length) {
return;
}

int indexOfOriginal = originalLength - 1, indexOfNew = newLength - 1;
while (indexOfOriginal >= 0) {
if (string[indexOfOriginal] == ' ') {
string[indexOfNew--] = '0';
string[indexOfNew--] = '2';
string[indexOfNew--] = '%';
} else {
string[indexOfNew--] = string[indexOfOriginal];
}

indexOfOriginal--;
}
}

int main() {
char str[20] = "We are happy";
int len = sizeof(str);

printf("Orignal string: %s\n", str);
replace_blank(str, len);
printf("New string: %s\n", str);

return 0;
}


四.相关题目:

有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1中并且所有的数字都是排序的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息