算法练习二:替换空格
2015-11-19 15:38
274 查看
#include<iostream> using namespace std; /*请实现一个函数,将一个字符串中的空格替换成“%20”。 例如,当字符串为We Are Happy.则经过替换之后的字符 串为We%20Are%20Happy。 思路:遍历一遍,遇到空格就行相应的替换操作,复杂度O(n*n)*/ void replaceSpace(char *str,int length) { if(length <= 0) return; int count = 0; while(*(str+count) != '\0') { if(*(str+count) != ' ') { count++; } else { length += 2; for(int i = length-1;i >= count+3;i--) { *(str+i) = *(str+i-2); } *(str+count) = '%'; *(str+count+1) = '2'; *(str+count+2) = '0'; count += 3; } } return; }
/*思路2:先统计空格个数,然后新建足够长的内存,然后再移动*/ void replaceSpace(char *str,int length) { int spaceNum=0; for(int i=0;i<length;i++) { if(str[i]==' ') spaceNum++; } int newIndex=length+2*spaceNum; char *index=str+length; while(index>=str) { if(*index==' ') { str[newIndex--]='0'; str[newIndex--]='2'; str[newIndex--]='%'; } else{ str[newIndex--]=*index; } index--; } }
/*测试函数*/ void TestreplaceSpace() { replaceSpace3("we are you.",11); return; }
注:以上两种方法,在VS2010环境下运行会出问题,因为访问了常量字符串之后的内存,运行出错。但是oj提交没问题,我估计是测试函数的问题,将输入作为常量字符串输入了。用下面的在VS2010下查看函数运行过程没问题。
<span style="font-size:18px;">/*思路2:先统计空格个数,然后新建足够长的内存,然后再移动*/ void replaceSpace(char *str,int length) { if(length <= 0) return; int count = 0; for(int i = 0;i < length;i++) { if(str[i] == ' ') count++; } char *res = new char[length + 2*count](); int newlength = length + 2*count; while(length) { if(str[length] != ' ') { res[newlength--] = str[length]; } else { res[newlength--] = '0'; res[newlength--] = '2'; res[newlength--] = '%'; } length--; } res[0] = str[0]; str = res; delete []res; return; }</span>
相关文章推荐
- XenServer Tools安装
- DIV+CSS实操一:经管系网页总体模块布局
- git忽略文件追踪
- android activity的生命周期
- C++实现含有中文字符串逆序
- 记住密码的那一刹那显示
- steganalysis图像隐写分析中的相对嵌入率和绝对嵌入率
- 【学习笔记】JS基于原型的面向对象
- String to Integer (atoi)
- AD多通道采集调试
- gdb调试利器
- 打印日志 Log
- js中与Java代码及ajax的执行顺序问题
- Permutations—回溯法求解
- ThinkPHP 静态页缓存
- python---raw_input()和input()输入区别
- 关于正则表达式里面的一个重要知识点
- SPServer : 一个基于线程池(包括HAHS和LF)的高并发
- poj--1094
- 谈”句柄泄漏”