面试题2:替换空格
来源:互联网 发布:思维江硬 知乎 编辑:程序博客网 时间:2024/06/06 12:56
来源:《剑指Offer》
题目:请实现一个函数,把字符串的每个空格替换成”%20”,原字符串后面有足够的空间,要求在原字符串上操作。例如输入”we are happy”,则输出”we%20are%20happy”。
分析:先遍历一遍统计出空格数,一个空格替换成三个字符,长度增加了2,N个空格,长度增加2N。则
替换后的字符串长度 = 原字符串长度 + 2N
设置两个指针,一个指向原字符串末尾,一个指向新字符串末尾。第二遍遍历,从后往前遍历。将原字符串最后一个字符复制到新字符串最后一个字符的位置,两个指针同时前移。当原字符串遇到空格,在新字符串对应位置插入”%20”三个字符,接着原字符串指针前移1位,新字符串指针前移3位。如此操作,直到原字符串第一个字符也复制完结束。
代码(C++):
#include<iostream>using namespace std;#define MAX_LEN 100/* 函数功能:替换字符串中的空格 */void replaceBlank(char data[]){ int i=0,j; int old_len; int new_len; int blank_num=0; // 遍历一遍,找出空格数 while(data[i]!='\0') { if(data[i]==' ') { blank_num++; } i++; } //-----------这里是关键------------ // 原来字符串长度 old_len=i+1; // 计算新字符串长度 new_len=old_len+2*blank_num; // 重置i,j i=old_len-1; j=new_len - 1; //-----------这里是关键------------ // 再遍历一遍,替换空格 while(i>=0) { if(data[i]!=' ') { data[j]=data[i]; j--; } else { data[j]='0'; data[j-1]='2'; data[j-2]='%'; j-=3; } i--; }}int main(){ char str[MAX_LEN];// 声明一个字符数组 // 输入数组 cout<<"请输入一个字符串,不超过20个字符"<<endl; gets(str); // 替换 replaceBlank(str); // 打印 cout<<str<<endl; return 0;}
0 0
- 面试题2:替换空格
- 面试题:替换空格
- 剑指Offer面试题2:替换空格
- 面试题之替换空格
- 面试题4:替换空格
- 面试题 -- 字符串替换空格
- 面试题4 替换空格
- 面试题4:空格替换
- 面试题4-替换空格
- 面试题4 替换空格
- 面试题四:替换空格
- 面试题4:替换空格
- 面试题4 替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- 面试题5:替换空格
- 面试题4:替换空格
- 堆和栈的区别(转过无数次的文章)
- ssh命令安装Vbox以及创建虚拟机等
- javascript面向对象编程-继承(笔记5)
- java设计模式(五)
- LED驱动的简单实现(fl2440)
- 面试题2:替换空格
- Spring的事务传播性与隔离级别
- Spring mvc中使用Spring Data Jpa 连接Mysql数据库
- 【星期二过完啦】PHP第六天
- [leetcode]Minimum Depth of Binary Tree
- 【java编程】IO流之操作各种数据类型
- GFS论文中文翻译
- Bag标签之轻开B2C电子商务网站登录校验实例
- ubuntu下安装Graphviz