剑指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中并且所有的数字都是排序的。相关文章推荐
- 剑指offer之java篇之空格替换(一)
- 剑指Offer 2.替换空格
- 剑指Offer学习总结-替换空格
- 剑指Offer-替换空格
- 剑指offer-chapter2-面试题4-替换空格(java)
- 码农小汪-剑指Offer之5 -替换空格
- [剑指offer]面试题4(替换空格)
- 牛客网_剑指offer_替换空格
- 剑指offer——字符串替换空格
- 剑指offer 空格替换
- 剑指offer---替换空格
- 剑指offer-面试题04-替换空格
- 剑指offer 2.3 数据结构4-替换字符串中的空格
- 剑指offer刷题—替换空格
- 剑指offer--面试题5:替换空格
- 剑指offer--替换空格(java)
- 剑指offer第二题 替换空格 Java实现
- 牛客网-剑指Offer-替换空格
- 剑指offer面试题:替换空格(将字符串每个空格替换为%20)
- 剑指offer--空格替换