百度:替换和清除空格

一、替换字符

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

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

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

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

      Java做的话直接replaceAll,不过这样的题,面试官会要求你用C写。

二、清除空格

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

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

      参考文献http://www.cnblogs.com/xwdreamer/archive/2012/05/08/2490033.html

三、清除多余空格

      题目:给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如输入"  We   are   happy.   ",则输出"We are happy."

      这道题目跟第二题类似,都是需要删除空格,这样可以肯定输出的字符串长度小于等于原先字符串的长度,那么就可以从头往后遍历而不怕后面的字符被覆盖。因为需要删除开始和结尾处处的空格,而字符串中间的空格又需要保存一个,我们需要进行另外的处理。我们可以通过设置一个标识位来进行处理,定义一个bool变量keep_space表示是否保存一个空格,如果keep_space=true表示保存一个空格,如果keep_space=false则不保存空格。初始化的时候将keep_space设为false,这样开始阶段的空格都不会被保存,当碰到一个不为空格的字符是,保存该字符,然后设置keep_space=true表明会保存字符串中的第一个空格,这样在碰到第一个个空格时就能够保存。

      在字符串结果,经过上述几步操作,可以保证字符串结尾要么是非空字符,要门是一个空字符,这样进行一次判断就好了,如果是空格字符,这将该空格设为'\0',如果不为空字符,则在其后面加上'\0'。

      这个真心赞。

      其实这些都可以用replaceAll函数,不管效率的话,现在很多国家级项目貌似就是这样做的,只需要你做出来,不管效率,而且很有可能做出来的是错的,哎。

时间: 2024-09-27 12:13:39

百度:替换和清除空格的相关文章

php addslashes及其他清除空格的方法是不安全的_php技巧

清除空格的方法是不安全的,部分原因是因为字符中的空格非常多,例如 "addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截." 最好是按照具体的参数需求校验确定是 int 等不是,外加数据库的参数操作方法.其实这个是数据库的 sql 问题,应该从源头数据库本身来解决,只不过有些数据库滑提供相应的方法罢了.

百度浏览器怎样清除缓存

百度浏览器怎样清除缓存? 打开百度浏览器: 点击右上方的"工具"菜单,在弹出的菜单栏中找到"清除痕迹" 在弹出的对话框中找到"缓存临时文件",在前面方框内打上勾,之后点击清除痕迹. 此时正在清除中.... 提示清除完毕时,点击"清除完毕"完成此次操作.         注:更多精彩教程请关注三联电脑教程栏目

百度浏览器怎么清除缓存?

  百度浏览器是小编比较喜欢的一款浏览器,其具有小巧快速的特点.不过百度浏览器与其他浏览器一样,使用久了也会产生各种缓存,长期不清理会影响百度浏览器速度.那么百度浏览器怎么清除缓存?下面百事网小编为大家详细介绍下. 首先打开百度浏览器,然后点击浏览器右上角的菜单图标,在弹出的选项中,点击"工具",然后在选择"清空浏览器"记录,如下图所示: 最后会弹出一个百度浏览器清理浏览器缓存的对话框,这里可以选择清理缓存的时间,一般建议选择全部,然后再单击底部的"清除浏

360导航中的新闻搜索已经由百度替换为360自家的综合搜索

针对百度大规模反制360,对360所带流量强行跳转至百度首页的做法,360一方做出回应,将网址导航搜索框中百度产品全部撤掉. 其中,新闻搜索由默认百度替换为360自家的新闻搜索,MP3由百度替换为搜狗,地图由百度替换为谷歌,不过用户仍然可以从下拉框中找到百度的相关产品. 昨晚9时左右,百度对360展开突袭,用户通过360综合搜索访问百度知道.百科.贴吧等服务时,将会强行跳转至百度首页.不过在一段时间内,不同的浏览器下使用这一服务,百度处理的方式略有差异. 根据新浪科技得到的反馈,在Firefox

PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)_php技巧

PHP压缩html网页代码 (清除空格,换行符,制表符,注释标记). 有个不错的方法就是压缩HTML,压缩html 其实就是:清除换行符,清除制表符,去掉注释标记 .它所起到的作用不可小视. 现提供PHP 压缩HTML函数.请大家不妨试试看,感觉还不错吧. 不废话了,直接上代码: 复制代码 代码如下: <?php /** * 压缩html : 清除换行符,清除制表符,去掉注释标记 * @param $string * @return 压缩后的$string * */ function compr

百度和Google清除站点的规则探讨

任何一个搜索引擎都需要制定一些收录和清除站点的标准,以便确保搜索结果的公正和公平,并提供客户最佳的搜索体验,不过不同搜索引擎对于收录和清除站点的标准是不太一样的. 关于收录上的问题,以前我曾经写了一篇文章比较百度和Google收录网站的区别,主要观点是,百度收录的多而快,对于小站点也可以大量收录,而Google收录速度较慢,主要优先收录大站点的页面. 那么,在清除网站方面,百度和Google又有什么不同呢?这是本文主要探讨的问题. 对于百度和Google的清除站点规则,我觉得主要分为程序的自动判

手机百度浏览器怎么清除地址栏输入历史

  手机百度浏览器清除地址栏输入历史教程:1:打开手机百度浏览器.点击手机界面的菜单键,这时候会出现百度浏览器的菜单 2:翻页,在第二页里面找到"设置选项."之前找"设置". 3:进入"设置"之后,下来, 选择"基本设置" 4:下拉,然后选择"清除记录."打开新的页面,里面有可以清除的各项内容.基本上保护隐私的选项都在里面了. 5:选择"地址栏输入历史"仅此打钩,然后确定.返回之后你会发

手机百度浏览器如何清除数据

  方法/步骤 1.打开手机里面的百度浏览器,直接来到他的主页面上来 2.我们可以在上边搜百度经验的主页面 3.点击下边的三个杠的按钮 4.然后我们发现这个是两页,我们点击到第二页 5.直接来到系统设置的主页面上来,点击下边的清除浏览记录 6.点击下边的清除全部数据 7.提示我们是否清除全部数据,我们点击是就行了.

百度浏览器怎么清除缓存

  1.首先我们打开百度浏览器,然后点击浏览器右侧的"工具"菜单.然后点击"清除浏览记录" 2.在弹出的对话框中设置你想要清除的记录.以及你想要设置哪个时间数据清除 3.或者大家可以选择在每次推出浏览器的时候自动清除数据,这样就不要你每次要进行步骤1和2的操作. 注意:大家在清理数据的时候,不要勾选已保存的网站密码,那样会把你保存在浏览器里面的账号密码清理,下次就不能自动登录了.