将空格用%20替换
2016-05-05 19:29
239 查看
#include<iostream> using namespace std; class Solution { public: void replaceSpace(char *str,int& length) { int k = length; int count = 0; int i; if(str==NULL) { return ; } //求空格数 for(i = 0;i<length ;i++) { if(str[i] == ' ') count++; } //新数组的长度,但若str只有length个空间那么直接使用就会发生数组越界,根据题意str不止那么一点空间, length = count*2+length; for(i = 0;i<length; i++) { //k始终指向的是数组的最后一个元素,即使这个数组允许的坐标范围没k大 k = length; //所以唯一可能的问题就是数组越界 //这句将每一个空格后的元素后移两位,并该空格为 %20 if(str[i] == ' ') { while( k != i)//我的问题就在这里,没有仔细考虑数组越界问题 { //str[k+2]=str[k]//因为k=length本身就指向的是数组的最后一个元素,这样会发生数组越界,也就是该语句执行完后的length会大于上一个length str[k]=str[k-2];//但是当k指向数组内部的时候就不会发生越界 k--; } str[i]='%'; str[i+1]='2'; str[i+2]='0'; } } } public: //一个函数的功能应该是单一的 void print(char *str,int length) { int i; int count = 0; for(i = 0;i<length ;i++) { if(str[i] == ' ') count++; } for(i = 0;i<length;i++) { cout<<str[i]; } cout<<endl; } }; int main() { Solution s1; char a[100] = "abc def "; int b= strlen(a); s1.replaceSpace (a,b); s1.print (a,b);//a[10]==*(a+10)==第十个元素,下标不等于元素个数 return 0; }
相关文章推荐
- 优先队列+括号配对 51Nod1476 括号序列的最小代价
- 线程间通信:生产者消费者(等待唤醒机制)
- 使用Unity3D 自主实战开发的赛车游戏实例,关键点记录 (六)之自动寻路及优化
- 浅谈锚链接(native 嵌套 h5)
- 程序员必读书单
- 实验一:认识树莓派
- JVM工作原理
- Win10太高端,如何连接XP / Win7 共享出来的打印机?
- CSS 颜色代码 qt
- swift实现ios类似微信输入框跟随键盘弹出的效果
- Exercise(12):纸牌均分
- VC Excel类操作类
- B. Gerald is into Art
- 前端学习
- html
- 狙击网络高延时点
- 终于明白POJ上有实数就容易wa的原因
- Effective C++ 改善程序与设计的55个具体做法之条款33
- close和dispose的区别
- B. Gerald is into Art