替换字符串中的空格(C++/Java实现)

题意描述:实现一个函数把字符串中的每个空格替换成“20%”。例如:

输入:“we are happy”

输出:“we%20are%20happy”

解题思路:(C++实现方法)如果从前往后遍历,遇到空格再将字符向后移动,则假设有O(n)个空格的时间效率就是O(n^2)。因此优化的解法就是一次移到位,先遍历一次字符串,可同时得到字符串的长度和字符串中空格的数量,然后对于1个空格用“%20”这3个字符替换,所以可以计算出最终字符串应该有的长度,两个指针,一个指向最终字符串的末尾,一个指向原始字符串的末尾,依次复制,遇空格便替换,当两指针重合(即指向同一位置),则说明空格替换完毕。如此做法时间效率就是O(n)

void replaceBlank(char string[], int length) {//length为字符数组的总容量
	if (string == NULL || length <= 0)
		return;

	int originalLength = 0;//字符串的原长度
	int numberOfBlank = 0; //空格个数
	int i = 0;
	while (string[i] != '\0') {
		originalLength++;
		if (string[i] == ' ')
			numberOfBlank++;
		i++;
	}

	int newLength = originalLength + numberOfBlank * 2;//新字符串的长度
	if (newLength > length)
		return;

	int indexOfOriginal = originalLength;
	int indexOfNew = newLength;
	while (indexOfOriginal >= 0 && indexOfNew >= indexOfOriginal) {
		if (string[indexOfOriginal] == ' ') {
			string[indexOfNew--] = '0';
			string[indexOfNew--] = '2';
			string[indexOfNew--] = '%';
		}
		else {
			string[indexOfNew--] = string[indexOfOriginal];
		}
		indexOfOriginal--;
	}
}

(Java实现方法)

//解题思路一:借助Java API中的replaceAll函数直接实现替换
public static String replaceSpace(String str) {
	String regex = " ";
	return str.replaceAll(regex, "%20");
}

//解题思路二:遍历字符串,遇到空格就替换
public static String replaceSpace1(String str){
	StringBuilder sb = new StringBuilder(str);
	for(int i=0; i<sb.length(); i++){
		if(sb.charAt(i) == ' ')
			sb.replace(i, i+1, "%20");
	}
	return sb.toString();
}
时间: 2024-09-30 10:06:09

替换字符串中的空格(C++/Java实现)的相关文章

替换字符串中的空格

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

(CSDN迁移)替换字符串中的空格

题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. public class Solution { public String replaceSpace(StringBuffer str) { String string = str.toString(); return string.replaceAll(" ", "%20"); }

C++用%20替换字符串中的空格(O(n)的时间效率)

#include <iostream> #include <malloc.h> #include <string.h> using namespace std; //将字符串中的空格用%20替换. void Grial(char *str) { if(str==NULL)return ; char *p = str; char *q = NULL; char buf[strlen(str)+1]; int count = 0;//计数空格数. while(*p!='\0

每日一题11:替换字符串中的空格

用指定的字符或字符串替换某个字符串中出现的所有空格,当用字符替换字符是,自然是很简单的,但是当使用字符串替换字符时,如果还是从前往后遍历,遇到指定字符就将其后所有字符往后移出足够空间的话,当字符串中的空格很多时,反复的移动字符会带来性能上的损失.但是如果是从后往前遍历呢?可以先遍历一次原字符串,得到字符串中空格的个数,然后就可以计算出实际需要的空间,再假设原字符串所在缓冲区有足够空间(否则新建一个缓冲区从前往后遍历就行了,这里说的是在不新建缓冲区的情况下做这件事),那么就可以计算出每个字符最后的

经典算法题-基础-替换字符串中的空格

目录 问题描述 解题思路 相关代码 问题描述 题目描述 请实现一个函数,把字符串中的每个空格替换成"%20" 要求 时间限制:1秒 空间限制:32768K 方法原型 public void replaceSpace(char[] str) 输入输出例子 输入:"Wa are happy" 输出:"We%20are%20happy" 解题思路 此题最自然的思路,就是从字符串的开始遍历,寻找空格,当遇到空格时,就将空格替换为"%20&quo

关于替换字符串中的空格问题

题目:实现一个函数,要求吧字符串中的所有空格替换成"%20".例如把"hello world"  变成  "hello%20world". 分析:我们可能会有三种方法: (1).创建一个新的数组,让其遇到空格就变成"%20",显然这种方法可以实现,但其也会浪费空间,所以这种方法也并不是很好. (2).在原有的基础上进行替换,当然前提是数组空间是足够的,然后就要想是从前往后还是从后向前,如果是从前向后进行替换的换的话,那后面的字

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

void replaceSpace(char *str,int length) { if(str==NULL||length<=0) return; int originlen=0; int newlen=0; int space=0; while(str[originlen]!='\0') { if(str[originlen]==' ') space++; originlen++; } originlen++; newlen=originlen+2*space; if(originlen==

将一个字符串中的空格替换为指定的内容——4

实现一个函数,将一个字符串中的所有空格替换为"%20",例如输入字符串"How beautiful you are!",输出结果应为"How%20beautiful%20you%20are!". 首先,如果另开辟一块空间并且足够将全部空格都替换成"%20",然后一个单词一个单词的拷贝过去,当遇到空格时就放进去"%20",这种低效率的方法肯定是可行的,但很显然不仅效率不高还浪费存储空间,因此,要节省空间就要在

Java 去除字符串中的空格和其他字符

直接上代码了. <span style="font-size:18px;">import java.util.regex.Matcher; import java.util.regex.Pattern; /** * java 去除字符串中的空格和其他字符 * @author YYBJ * @date 2014-10-19 */ public class CleanString { public static String replaceBlank(String str) {