【18】替换空格

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

方案一:朴素做法是枚举字符串,每次找到一个字符串把当前空格后面的字符串往后移动2个,再把%20插入。这样每次枚举一个字符可能就要移动n个字符,总的n个字符,时间复杂度O(n^2),效率低

方案二:1.先利用O(n)的时间求出字符串中所有的空格的个数,这样就可以求出替换后总的字符串长度

               2. 然后从后往前枚举字符,如果不是空格,则依次把字符存放在最终的位置上,遇到空格的时候就填上%20

               3. 例如字符串"we are happy.",总的空格数为2,则最后字符串长度为17

                   从后往前枚举字符串,第一个是y直接填入第17个位置,然后是p,依次.....

                   直到遇到空格的时候往前填入0、2、%,然后继续枚举字符串

               这个方法的时间复杂度O(n),比起朴素算法效率高了很多

#include<iostream>
#include<algorithm>
using namespace std;

void ReplaceBlank(char *string){
	//如果是空串直接返回
	if(string == NULL){
	   return;
	}
	//求字符串的空格数
	int length = strlen(string);
	int blankCount = 0;
	for(int i = 0; i < length; i++){
		if(string[i] == ' '){
		   ++blankCount;
		}
	}
	//新的字符串的长度
	int newLength = length+2*blankCount;
	//新的字符串
	string[newLength] = '\0';
	int pos = newLength-1;
	for(int i = length-1; i >= 0; i--){
		if(string[i] != ' '){
		   string[pos] = string[i];
		   --pos;
		}
		else{
		   string[pos--] = '0';
		   string[pos--] = '2';
		   string[pos--] = '%';
		}
	}
}

int main(){
    //样例
	char string[] = "we are happy.";
	ReplaceBlank(string);
	cout<<string<<endl; //输出we%20are%20happy.

	return 0;
}
时间: 2025-01-25 19:34:37

【18】替换空格的相关文章

[剑指Offer]6.替换空格

题目 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路 我们首先想到的就是从前往后扫描,如果空格,就替换为%20,但是这样需要移动空格后的元素. 我们还有一种方法,首先遍历一遍字符串,统计出空格的个数,并可以由此计算出替换之后的字符串的长度.每替换一个空格,长度增加2,因此替换之后的字符串长度等于原来的长度加上2乘以空格的个数.即 替换后的字符串的长度 = 原字符串长度 +

九度OJ 题目1510:替换空格

题目1510:替换空格 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1697 解决:436 题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个输入文件仅包含一组测试样例. 对于每组测试案例,输入一行代表要处理的字符串. 输出: 对应每个测试案例,出经过处理后的字符串. 样例输入: We Are Happy 样例输出: We%20Are%20H

c语言-【编程题】替换空格,在线测试系统显示程序异常退出

问题描述 [编程题]替换空格,在线测试系统显示程序异常退出 题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 我的编程思想是先统计空格个数blankCount,由此算出替换后的字符串长度tLength,后来通过下标从后面往前面替换,这样遇到空格插入%20,否则将字符后移. 我的程序: class Solution { public: void replaceSpace(c

java中得到classpath和当前类的绝对路径的一些方法(路径中的%20&quot;进行替换空格)

原网址:http://blog.csdn.net/shendl/article/details/1427475 (注意:利用下面方式得到路径,如果路径中有空格字符, 那么会有"%20"进行替换, 所以得到之后再将"%20"替换成空格) 下面是一些得到classpath和当前类的绝对路径的一些方法.你可能需要使用其中的一些方法来得到你需要的资源的绝对路径. 1,FileTest.class.getResource(""):      FileTes

题目1510:替换空格 为什么WA?

问题描述 题目描述:请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为WeAreHappy.则经过替换之后的字符串为We%20Are%20Happy.输入:每个输入文件仅包含一组测试样例.对于每组测试案例,输入一行代表要处理的字符串.输出:对应每个测试案例,出经过处理后的字符串.样例输入:WeAreHappy样例输出:We%20Are%20Happy代码:importjava.util.ArrayList;importjava.util.Collection;imp

CareerCup之1.5 空格替换

[题目] 原文: 1.5 Write a method to replace all spaces in a string with '%20'. 译文: 写一个函数,把字符串中所有的空格替换为%20 . [分析] 我们首先应该想到的是原来一个空格字符,替换之后变成'%','2','0'三个字符,因此字符串会变长.如果是在原来的字符串上做替换 ,那么我们就有可能覆盖修改在该字符串后面的内存.如果是创建信的字符串并在新的字符串上做替换,那么我们自己可以分配足够的 内存.由于两种不同的解决方案,我们

剑指offer系列之二:字符串空格替换

题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy,则经过替换之后的字符串为We%20Are%20Happy. 看到这题,我的第一思路是这样的:一组单词不是有空格嘛,所以直接使用String类的split函数直接分割为char数组不就好了,不过在这之前需要判断一下第一个位置和最后一个位置是否有空格,然后针对空格的出现情况再进行替换.发现OJ的时候,如你所猜,自然是失败的.因为我忽略一个问题,就是如果一个句子中都是空格,调用spli

JS替换字符串中空格方法_javascript技巧

复制代码 代码如下: <input type=hidden name="space" value=" "> 通常情况下输入域当中的 替换不掉(源代码当中有 ,页面上显示为空格),如果想替换掉,可以用另外手段. 增加一个隐藏域,值为 ,然后再替换 复制代码 代码如下: var sp=document.getElementById("space").value; strData = document.all( "CommDN&q

php回车与空格字符替换函数

  // 函数名:ReplaceSpacialChar($C_char) // 作 用:特殊字符替换函数 // 参 数:$C_char(待替换的字符串) // 返回值:字符串 // 备 注:这个函数有问题,需要测试才能使用 //-----------------------------------------------------------------------------------  代码如下 复制代码 function ReplaceSpecialChar($C_char) { $C