4. 替换空格(字符数组)
2015-08-20 16:23
302 查看
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为”We Are Happy.“则经过替换之后的字符串为“We%20Are%20Happy.”解析
直观的想法是,新建一个数组,逐个复制,遇到空格时,写入%20,但这需要占用额外空间。如果我们顺序的遍历字符串,当遇到空格时,用%20替换空格,这将覆盖掉空格后面的字符
如果覆盖前,后移剩余字符串,那么移动的时间复杂度为O(n^2).
采用从后往前复制字符的方法。首先统计空格的个数,计算出新字符串的长度,然后用2个指针,1个指向新字符串尾,1个指向旧字符串尾,两指针同步向前,旧指针遇到空格时,新索引指针按地址写入%20,当新旧指针相等时说明已经替换完全部空格。
实现
void ReplaceBlank(char string[], int length){ //判断传参是否有效 if(string==NULL || length<=0) return; //计算字符串的长度,计算空格个数 int oldLength = 0; int numberOfBlank = 0; for(int i=0; string[i]!='\0'; i++){ oldLength++; //字符长度不包括字符串结束符 if(string[i] == ' ') numberOfBlank++; } //判断原有字符数组是否能容纳新的字符串 int newLength = oldLength + numberOfBlank * 2; if(newLength >= length) return; //替换空字符 int indexOld = oldLength; int indexNew = newLength; while(indexOld != indexNew){ if(string[indexOld] == ' '){ string[indexNew--] = '0'; string[indexNew--] = '2'; string[indexNew--] = '%'; indexOld--; }else{ string[indexNew--] = string[indexOld--]; } } }
相关文章推荐
- 数据库优化 ---- 问题查询定位
- Nginx配置文件nginx.conf中文详解(总结)
- 邓白氏号码(DUNS Number)查询
- 网络基础知识小小说
- oracle:利用游标统计每年入职的员工人数
- DOM(一)-09-(window常见事件)
- 修改linux文件权限命令:chmod chgrp chown
- 关于property的各个修饰符(strong,weak,retain,assign,copy等等)
- 九度 1107 - 霍夫曼树 - 搬水果
- Shell Script的默认变量
- 第一次
- 正则表达式语法
- sed命令
- 黑马程序员——Java基础---基础语法(四)
- HashSet,TreeSet和LinkedHashSet的区别
- 最水的STL,以为考贪心,结果题目就是模拟加上优先队列
- UNIX Tutorial One_directories
- 黑马程序员-----String类
- html5 使用FileReader对象的readAsDataURL方法来读取图像文件
- DOM(一)-08-(window常见方法_2)