博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer面试题4】替换空格%20和清除空格
阅读量:4842 次
发布时间:2019-06-11

本文共 1979 字,大约阅读时间需要 6 分钟。

1.替换空格%20

题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。

1.1分析

将长度为1的空格替换为长度为3的“%20”,字符差的产度变长。如果允许我们开辟一个新的数组来存放替换空格后的字符串,那么这道题目就非常简 单。设置两个指针分别指向新旧字符串首元素,遍历原字符串,如果碰到空格就在新字符串上填入“%20”,否则就复制元字符串上的内容。但是如果面试官要求 在原先的字符串上操作,并且保证原字符串有足够长的空间来存放替换后的字符串,那么我们就得另想方法。

如果从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖,那么我们就考虑从后往前进行替换。

  1. 首先遍历原字符串,找出字符串的长度以及其中的空格数量,
  2. 根据原字符串的长度和空格的数量我们可以求出最后新字符串的长度。
  3. 设置两个指针point1和point2分别指向原字符串和新字符串的末尾位置。
  4. 如果point1指向内容不为空格,那么将内容赋值给point2指向的位置,如果point1指向为空格,那么从point2开始赋值“02%”
  5. 直到point1==point2时表明字符串中的所有空格都已经替换完毕。

1.2代码实例

#include
#include
using namespace std;//length为字符串总容量void replacespace(char string[], int length) { int blanknumber = 0; int i; for (i = 0; string[i] != '\0'; i++) { if (string[i] == ' ') { blanknumber++; } } int k = i + 2 * blanknumber; if (k > length) return; string[k]='\0';//此行必不可少 int point1 = i - 1, point2 = k-1; for (; point1 >= 0 && point2 > point1; point1--) { if (string[point1] == ' ') { string[point2--] = '0'; string[point2--] = '2'; string[point2--] = '%'; } else string[point2--] = string[point1]; }}int main() { char *string=new char[50]; while (gets(string)) { replacespace(string, 50); puts(string); } return 0;}

 2.清除空格

题目:请实现一个函数,把字符串中的每个空格清除掉。例如输入“We are happy.”,则输出“Wearehappy.”。

2.1分析

这道题目是需要清楚空格,那么清除空格后所得到的字符串要比原先的字符串要短,这是我们从头到尾进行清楚空格的话就不会覆盖到空格后面的字符,所以我们可以从头开始清除。

  1. 设定两个指针p1和p2初始状态都指向字符串首字符。
  2. 如果p2指向的元素不为空格,那么将p2指向的内容赋值给p1,然后p1和p2指向下一个元素;如果p2指向的内容为空格,那么p2指向下一个元素。
  3. 直到p2指向字符串末尾的'\0'时清除空格结束。
    #include
    #include
    using namespace std;void ReplaceBlank(char *s){ //设置两个指针指向数组首元素 char *p1=s; char *p2=s; while('\0'!=*p1) { if(' '!=*p2)//如果p2指向不为空格,则将p2指向内容复制给p1指向 *p1++=*p2++; else//如果p2指向为空格,则p2指针向前移动一格。 p2++; }}void main(){ char test[100]="we are happy."; cout<
    <

     

转载于:https://www.cnblogs.com/tgkx1054/archive/2012/11/10/2764502.html

你可能感兴趣的文章
city-picker插件使用-移动h5三级联动
查看>>
如何安装多操作系统
查看>>
Codeforces 1132G(dfs序+线段树)
查看>>
Hibernate
查看>>
十二、异常处理
查看>>
HashMap和HashTable的区别
查看>>
团队作业9————事后诸葛亮分析
查看>>
quartz.net 使用(一)-执行定时计划任务
查看>>
github上的版本和本地版本冲突的解决方法
查看>>
Centos7安装gitlab服务器
查看>>
Oracle事务
查看>>
King's Pilots
查看>>
在android中使用SharedPreferences进行数据存储
查看>>
Aspose.Cells API 中文版文档 下载
查看>>
异步编程的解决方案(执行代码的先后顺序:1.主任务,任务队列:2.微任务,3.宏任务)Promise/Generator/async/Fetch...
查看>>
软件工程概论作业四
查看>>
Android学习(十) SQLite 基于SQLiteOpenHelper的操作方式
查看>>
MySQL 相关文件的简单说明
查看>>
qt-win-opensource-4.8.4-mingw安装流程
查看>>
C Runtime
查看>>