剑指offer----替换空格
2016-05-11 22:56
183 查看
在"we are happy"这个字符串中,将所有的空格替换成字符串%20。
分析:当看到这个题目时,我们就会想着遍历字符串嘛,遇到空格替换成%20,可是空格只有一个字节,%20是3
个字节,明显是不够的,所以我们遇到把字符串整体后移(字符串只能存放在数组中),这样,空格越多,后边的字
符移动的次数也越多。(记住:移动的时候一定要移动\0)这样,如果我们一次移动到位,这样是不是好一点呢??
我们将后边也就是最后一个字符一次移动到位,(2个空格,移动4位)。然后从后向前依次改写就好(遇到空格就改
成%20)否则,直接复制。看下边的代码:
复制了,当然你复制也没关系,只是无用功罢了。
这个题目,同学也有整理过,他给出了另外一种方法,我觉得比较好:主函数另外再给出一个数组作为实参传给操作
函数,这个数组存放改后的字符串。具体操作:从前向后,当遇到空格时,写成%20,其他的直接复制就好。这
里就不给出代码,有兴趣的自己实现。
其实%20也不是随机给的,你可以在浏览器下看看就知道了。
以上如有不合理,请指出~~
分析:当看到这个题目时,我们就会想着遍历字符串嘛,遇到空格替换成%20,可是空格只有一个字节,%20是3
个字节,明显是不够的,所以我们遇到把字符串整体后移(字符串只能存放在数组中),这样,空格越多,后边的字
符移动的次数也越多。(记住:移动的时候一定要移动\0)这样,如果我们一次移动到位,这样是不是好一点呢??
我们将后边也就是最后一个字符一次移动到位,(2个空格,移动4位)。然后从后向前依次改写就好(遇到空格就改
成%20)否则,直接复制。看下边的代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #include<assert.h> void fillblack(char *arr) { assert(arr); int len = strlen(arr); int blacks = 0; char *oldEnd = arr + len; char *newEnd = arr + len ; while (*arr++) { if (*arr == ' ') blacks++; } newEnd += 2 * blacks; while (oldEnd <= newEnd) { if (*oldEnd != ' ') { *newEnd-- = *oldEnd--; } else { *newEnd-- = '0'; *newEnd-- = '2'; *newEnd-- = '%'; oldEnd--; } } } int main() { char arr[20] = "we are happy"; fillblack(arr); printf("%s",arr); system("pause"); return 0; }复制操作循环结束的条件:当新串的指针与旧串的指针指向相等时(也就是复制到字符串的第一个单词时)就不需要
复制了,当然你复制也没关系,只是无用功罢了。
这个题目,同学也有整理过,他给出了另外一种方法,我觉得比较好:主函数另外再给出一个数组作为实参传给操作
函数,这个数组存放改后的字符串。具体操作:从前向后,当遇到空格时,写成%20,其他的直接复制就好。这
里就不给出代码,有兴趣的自己实现。
其实%20也不是随机给的,你可以在浏览器下看看就知道了。
以上如有不合理,请指出~~
相关文章推荐
- JavaScript 事件管理
- AngularJs (二) 搭建Deployd 服务爬坑
- CSS基础知识一(CSS的应用方式、CSS选择器、选择器的声明、文字CSS效果、)
- CSS基础知识二(段落设置CSS效果、图片边框、div和span区别、CSS控制背景、CSS控制链接)
- H5特性简介
- 《AngularJS》5个实例详解Directive(指令)机制
- AngualrJS学习记录-作用域的层级和事件
- js弹窗返回值详解(window.open方式)
- 谈谈 ES6 的 Promise 对象
- jquery的ajax可以传入的三种参数类型
- graphic2D和bufferedImage区别
- JavaScript根据CSS的Media Queries来判断浏览设备的方法
- CSS应用:阴影和轮廓
- CSS选择器总结
- jQuery的XX如何实现?——3.data与cache机制
- 使用js实现上移、下移、置顶、置底功能及源码案例
- 如何用js得到当前页面的url信息方法(JS获取当前网址信息)
- React Native生命周期整理
- Caffe
- 输入班级人数,姓名,分数,创建集合,并按照表格样式打印出来