剑指Offer第二版 面试题5 替换空格

预备知识:

字符串:

1.C/C++中每个字符串都以字符 '\0' 作为结尾。好处:方便找到尾部。缺点:额外字符开销,不留神会造成字符串越界,将'\0'遗忘。

2.char* str3="hello world"; char* str4=“hello world”;    str3与str4是两个字符指针,无需为它们分配内存以存储字符串的内容,“hello world”常量字符串在内存中只有一个拷贝,两个指针指向“hello world”在内存中的地址,故 str3==str4

char str1[] = “hello world”; char str2[] = "hello world"; 这里str1和str2是两个字符串数组,会分配长度为12字节的空间,并把“hello world”的内容分别复制到数组中,这是两个初始地址不同的数组,故str1和str2不想等

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

解题思路:

为了减小时间复杂度,先遍历一次此字符数组,计算出空格和所含字符数,比如“We are happy.” 数组长度为14,空格数为2,替换之后长度为18,即14+2*2=18。在遍历时,遇到‘\0’时停止,没有算上结束符,所以长度算17,正好与数组下标0-17对应。可以用长度来表示下标。两个下标p1在当前长度位置,p2在新长度位置,当p1不断向前遍历没有遇到‘ ’时,把此时p1下标对应的值赋给p2对应值,直到遇到' '插入“%20”,依次……

代码:


实现函数

首先要判断传参过来的数组是否存在,是否为空

其次判断新长度是否超过str数组本身所开辟的内存空间。

测试部分如下:



各种情况测试



类似题目注意:从尾到前遍历移动的话会提高效率。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,150评论 0 7
  • NSRange : 表示范围作用的结构体,3种方式创建 // 方式一 NSRange range; locatio...
    路墨阅读 1,057评论 1 8
  • 一、(一共三十题) 1.main() { int a[5]={1,2,3,4,5}; int *ptr=(int ...
    iOS_Alex阅读 765评论 0 2
  • 一、(一共三十题) 1.main() { int a[5]={1,2,3,4,5}; int *ptr=(int ...
    iOS_Alex阅读 987评论 0 0
  • 也罢 人都有局限性 我认为你有潜力 可是你的选择 决定你这辈子飞不远飞不高 你还是败在自己没有文化上 对 上没上大...
    jiaozi123阅读 387评论 0 2