百度:替换和清除空格

一、替换字符

题目:请实现一个函数,把字符串中的每个空格替换成“%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-11-05 12:19:00

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

addslashes 及 其他 清除空格的方法是不安全的

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

清除空格

清除输入行的空格,当时还想了一个来小时... 1 #include<stdio.h> 2 3 int strlen(char *s) 4 { 5 int n; 6 7 for(n=0;*s++ !='\0';n++); 8 return n; 9 } 10 main() 11 { 12 char s[1000]; 13 int i,len; 14 while(scanf("%s",s)!=EOF) 15 { 16 int flag=0; 17 len=strlen(s);

将字符串中连续的多个空格替换成一个空格

一,问题描述: 给定一个字符串,将字符串中连续的多个空格替换成一个空格. 如:"Hello   World I      come from china"----->"Hello World I come from china" 二,思路: 逐个字符扫描字符串,遇到连续多个空格时,只添加第一个空格.遇到非空格字符时,添加该字符.使用StringBuilder的add()方法添加字符. 需要一个boolean 变量指示是否是第一个空格.当遇到空格且该空格是第一个

字符串函数:获取个数,替换,除空格

--字符串函数--LEN():获取指定参数的字符个数select LEN('中华人民共和国')--CHARINDEX(所需要查询的字符串,源字符串,查询起始位置)-IndexOf().能够找到就返回从1开始的索引,如果不能找到就返回0select CHARINDEX('人民','中华人民共和国')select CHARINDEX('人 民','中华人民共和国')select CHARINDEX('人民','中华人民共和国',2)--UPPER ToUpper() LOWER()--ToLower

ios 字符串的插入删除查找与替换,删除空格

NSString *str1 = @"This is a example.";  NSMutableString *mstr = [[NSMutableString alloc] init]; //创建可变字符串  NSRange substr; //子字符串的范围mstr = [NSMutableString stringWithString:str1];  //插入字符  [mstr insertString:@"very easy " atIndex:10];

php 空格无法替换,utf-8空格惹的祸

一次坑爹的小bug.读取一段文字(编码utf-8),想替换掉空格,str_replace(" "..).preg_replace("/\s/"..)都不起作用. <?php // 替换<p>后4个空格 $str = file_get_contents("http://m.ts.cn/new/99cms_ts/api.php?s=/News/getNewsInfoTmp/Nid/51089"); $str = str_replac

剑指offer—替换字符串中空格

题目: 实现一个函数,把字符串中的每个空格替换成"%20".加入输入"we are happy.",则输出"we%20are%20happy.". 时间复杂度为O(n^2) 基本思想:从前往后把字符串中的空格替换成%20. 假设字符串的长度为n,对每个空格字符,需要移动后面O(n)个字符,因此总的时间复杂度为O(n^2). 时间复杂度为O(n) 基本思想:先遍历找出空格总数,并计算出替换之后的字符串的总长度.然后从字符串的后面开始复制和替换. 所

【笔试】22、替换字符串的空格

/** *题目:请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"We are happy.",则输出"We%20are%20happy." *时间:2015年8月25日10:34:31 *文件:ReplaceBlank.java *作者:cutter_point */ package bishi.Offer50.y2015.m08.d25; public class ReplaceBlank { public static cha

Java如何清除空格?

在Java编程中,如何清除/删除空格? 以下示例演示如何使用Util.regex.Pattern类的matcher.replaceAll(stringname)方法来删除空格. package com.yiibai; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RemovingWhitespaces { public static void main(String[] argv) { S