题目

原文:

Write a method to replace all spaces in a string with ‘%20’.

译文:

写一个函数,把字符串中所有的空格替换为%20 。

解答

简单题。先遍历一次字符串,得到空格个数,进而得到将空格转换成%20后的串长度 (每个空格替换为%20需要增加2个字符,x个空格增加2x个字符)。 然后从后向前依次对空格进行替换,非空格原样拷贝。如果原串有足够大的空间, 则替换过程直接在原串上进行, 因为从后向前替换的过程中,新串用到的空间一定是旧串不需要的空间,看图示:

旧字符串:i am hawstein
旧串索引:   p
新字符串:i%20am%20hawstein
新串索引:     q

如果原串的空间不够大,或是就直接是字符串长度加1(不要忘了'\0'), 那么就新开一个串来保存替换后的结果。

代码如下:

#include <iostream>
#include <cstring>
using namespace std;char* replace1(char *c){if(c == NULL) return NULL;int len = strlen(c);if(len == 0) return NULL;int cnt = 0;for(int i=0; i<len; ++i){if(c[i] == ' ')++cnt;}char *cc = new char[len+2*cnt+1];int p = 0;for(int i=0; i<len; ++i){if(c[i] == ' '){cc[p] = '%';cc[p+1] = '2';cc[p+2] = '0';p += 3;}else{cc[p] = c[i];++p;}}cc[p] = '\0';return cc;
}void replace2(char *c){if(c == NULL) return;int len = strlen(c);if(len == 0) return;int cnt = 0;for(int i=0; i<len; ++i){if(c[i] == ' ')++cnt;}int p = len + 2*cnt;c[p--] = '\0';//the space must be allocated first.for(int i=len-1; i>=0; --i){if(c[i] == ' '){c[p] = '0';c[p-1] = '2';c[p-2] = '%';p -= 3;}else{c[p] = c[i];--p;}}
}
int main(){const int len = 100;char c[len] = "";cout<<replace1(c)<<endl;replace2(c);cout<<c<<endl;return 0;
}

Cracking the coding interview--Q1.5相关推荐

  1. Cracking the Coding Interview Q1.2

    2019独角兽企业重金招聘Python工程师标准>>> My Solution: #include<stdio.h> #include<string.h>/* ...

  2. [Free] Cracking the Coding Interview 6th Download

    [Free] Cracking the Coding Interview 6th Download 推荐给有梯子的童鞋们! https://www.pdfdrive.com/cracking-the- ...

  3. Cracking the coding interview

    转自:http://hawstein.com/posts/ctci-solutions-contents.html Cracking the coding interview--问题与解答 March ...

  4. 经典算法题目:Cracking the coding interview 问题与解答

    Cracking the coding interview--问题与解答 March 14, 2013 作者:Hawstein 出处: http://hawstein.com/posts/ctci-s ...

  5. 渣基础:比照Hawstein学Cracking the coding interview(1)

    <C++ Primer 第五版>书实在是太长,太厚了.总是看了十几页就看累了,坚持不了多久,想了想还是别勉强自己,决定把它当工具书查看,或者积累足够的C++经验后再翻阅一遍. 目前的打算是 ...

  6. 渣基础:比照Hawstein学Cracking the coding interview(3)

    作者:Hawstein 出处:http://hawstein.com/posts/1.4.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Common ...

  7. 渣基础:比照Hawstein学Cracking the coding interview(2)

    作者:Hawstein 出处:http://hawstein.com/posts/1.4.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Common ...

  8. [Cracking the Coding Interview] 4.4 Check Balanced

    Implement a function to check if a binary tree is balanced. For the purpose of this question, a bala ...

  9. 《Cracking the Coding Interview》——第18章:难题——题目11

    2014-04-29 04:30 题目:给定一个由'0'或者'1'构成的二维数组,找出一个四条边全部由'1'构成的正方形(矩形中间可以有'0'),使得矩形面积最大. 解法:用动态规划思想,记录二维数组 ...

  10. 《Cracking the Coding Interview》——第6章:智力题——题目5

    2014-03-20 01:08 题目:扔鸡蛋问题.有一个鸡蛋,如果从N楼扔下去恰好会摔碎,低于N楼则不碎,可以继续扔.给你两个这样的鸡蛋,要求你一定得求出N,怎么扔才能减少最坏情况下的扔的次数? 解 ...

最新文章

  1. dede 表单必填_织梦dedecms自定义表单选项必填怎么修改
  2. linux查看日志的几种命令,Linux查看日志三种命令(转载)
  3. 手机zip模拟器_【教程】萌新手机krkr2模拟器运行教程
  4. VTK:可视化之DistanceToCamera
  5. php多进程 写入文件_PHP多进程中使用file_put_contents安全吗?
  6. HDOJ树形DP专题之Centroid
  7. Redis:缓存问题之数据不一致(更新数据库时 主动更新)
  8. job用法 Java_Web App使用Quartz实现java schedule job
  9. Knockout应用开发指南 监控属性(Observables)
  10. 应用时间序列案例-基于R语言
  11. js批量下载图片并压缩打包
  12. codeforces Star sky(二维前缀和)
  13. 【亚伦博客】《蝙蝠侠前传2:黑暗骑士》里发生了什么
  14. 解决Win10能登陆QQ却无法打开网页问题
  15. 模型无关的全局特征依赖分析方法 I ——部分依赖曲线分析与条件依赖曲线分析
  16. 为什么C语言长盛不衰,永不会过时?
  17. HDU - 胜利大逃亡(搜索)
  18. Android开发AndroidStudio与eclipse安装与使用
  19. mysql数据库设计与应用答案智慧树_智慧树_MySQL数据库设计与应用_答案全部
  20. 软件开发、系统定制、小程序等怎么报价?

热门文章

  1. 2020测试机械硬盘软件,YDT 3825-2020面向互联网应用的机械硬盘测试规范.pdf
  2. springboot templates读取不到_整合spring mvc + mybatis,其实很简单,spring boot实践(5)
  3. TS和JS相对比的优势
  4. 点击php文件显示下载文件,求助 为什么编的下载文件代码,打开后下的全是php文件...
  5. 骄傲的代价_JAVA
  6. 【C++】38.类成员变量声明为 对象与指针的区别
  7. Stanford机器学习笔记-6. 学习模型的评估和选择
  8. Spring IOC 容器源码分析 - 获取单例 bean
  9. 31 天重构学习笔记索引
  10. 国内大学毕业论文LaTeX模板集合