剑指offer第四题方法总结
2016-05-12 00:15
211 查看
题目:输入一个字符串,要求将这个字符串中所有空格的位置都替换成”%20“.例:输入I love you. 输出I%20love%20you.
分析:空格是一个字符,%20是三个字符,所以替换的时候要向后挪动。
这里有三种方法。
第一种:从前向后遍历字符串,遇到一个空格,则将这个空格之后的字符'\0'开始依次向后挪动两个字符,然后再放入%20,直到遍历完整个字符串。这种方法效率比较低。
第二种:重新创建一个字符数组,将这个字符串拷贝过来,遇到空格就替换成%20. 这种方法虽然效率高,但是空间复杂度却增高了。
第三种:先统计整个字符串中空格的数量。再'\0'开始向后一次挪动2*空格数,遇到一次空格,则空格数减一,并且将%20放入。直到空格数为0. 这种方法时间和空间相对来说都是最理想的。
在这里我们只实现第三种:
分析:空格是一个字符,%20是三个字符,所以替换的时候要向后挪动。
这里有三种方法。
第一种:从前向后遍历字符串,遇到一个空格,则将这个空格之后的字符'\0'开始依次向后挪动两个字符,然后再放入%20,直到遍历完整个字符串。这种方法效率比较低。
第二种:重新创建一个字符数组,将这个字符串拷贝过来,遇到空格就替换成%20. 这种方法虽然效率高,但是空间复杂度却增高了。
第三种:先统计整个字符串中空格的数量。再'\0'开始向后一次挪动2*空格数,遇到一次空格,则空格数减一,并且将%20放入。直到空格数为0. 这种方法时间和空间相对来说都是最理想的。
在这里我们只实现第三种:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> char *replace_blank(char src[]) { assert(src ); int blank = 0; char *psrc = src ; while (*psrc) //统计空格个数,同时让psrc指向‘\0' { if (*psrc == ' ' ) blank++; psrc++; } while (blank) { if (*psrc== ' ' ) //遇到空格开始替换 { *(psrc+blank*2)= '0'; *(psrc+blank*2-1)= '2'; *(psrc+(--blank)*2)= '%'; } else *(psrc+blank*2)= *psrc; psrc--; } return src ; } int main() { char src[50] = { 0 }; gets(src); char *ret = replace_blank(src); printf( "%s\n", ret); system( "pause"); return 0; }
相关文章推荐
- JSON解析
- php格式化json函数示例代码
- jquery ajax局部加载方法详解(实现代码)
- 基于Bootstrap重置输入框内容按钮插件
- Bootstrap3制作自己的导航栏
- jQuery判断checkbox选中状态
- JS创建事件的三种方法(实例代码)
- Bootstrap3制作图片轮播效果
- 基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
- 20分钟轻松创建自己的Bootstrap站点
- 基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
- 20分钟成功编写bootstrap响应式页面 就这么简单
- 基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
- 基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
- 基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
- 基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
- 基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
- 基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
- 深入浅析JavaScript中with语句的理解
- jQuery CSS3自定义美化Checkbox实现代码