字符串 空格替换

题目描述

请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。

给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。

测试样例:

“Mr John Smith” 13
返回:“Mr%20John%20Smith”
 
“Hello  World”,12
返回:“Hello%20%20World”
 
C++风格解法
法一: 用 string::iterater it 遍历整个字符串,再通过 (*it) 把 ‘ ‘ 换成 ‘%20‘
法二: 用 string::find() 查找字符串中的 ‘ ‘,再用 string::replace() 把 ‘ ‘ 换成 ‘%20‘
 
#include <fstream>
#include <iostream>
using namespace std;

class Replacement_by_iterator {	//法一:AC
public:
    string replaceSpace(string iniString, int length)
    {
    	if(length<=0)
    		return 0;
    	string strNew;
    	string::iterator it;
    	for(it=iniString.begin(); it<=iniString.end(); it++)
        {
    	    if(*it==‘ ‘)	//注单引号:指向的是单个字符
               strNew += "%20";
	        else
			   strNew += (*it);
        }
	    return strNew;
    }
};

class Replacement_by_replace {	//法二:AC
public:
    string replaceSpace(string iniString, int length)
    {
        string strNew = iniString;
        while(strNew.find(" ") != std::string::npos)
        { //npos: string 类将 npos 定义为保证大于任何有效下标的值。即 string类可容纳的最大大小
             strNew.replace(strNew.find(" "),1, "%20");
        }
        return strNew;
    }
};

int main(int argc, char** argv)
{
	ifstream fin("test.txt", ios::in);
	if(fin.fail())
	{
		cout << "文件打开失败" << endl;
		exit(-1);
	}
	char ch;
	string testString;
	while(fin.get(ch))
	{
		testString += ch;
	}
	fin.close();

	Replacement_by_iterator replace1;  //法一
	Replacement_by_replace replace2;   //法二
	cout << replace1.replaceSpace(testString, testString.length()) << endl;
    cout << replace2.replaceSpace(testString, testString.length());
        return 0;
}
时间: 2024-10-05 09:49:01

字符串 空格替换的相关文章

字符串空格替换、合法括号序列判断、求最长无重复子串问题

一:字符串空格替换 将字符串中的空格全部替换为"%20".假定该字符串后面有足够的空间存放新增的字符. 如:Mr John Smith->Mr%20John 陷阱:Java玩家可能第一时间想到用split(" ")分割原字符串,然后重新拼接的时候在词间添加"%20".这种思路的不完善之处在于:如果原字符串以空格结尾.或者单词之间不止一个空格,则会导致拼接出来的字符串不符合要求. 解法:该题说明原字符串后面有足够空间(Java玩家可忽略,因为

C++字符串空格替换题

在网络编程中,需要将URL参数中含有的特殊字符通过在'%'后加上ASCII码的两位十六进制的方法,转换成服务器端能够识别的字符,如空格的ASCII码为32即16进制的0x20,则需要替换为"%20". 题目:请实现一个函数,把传入char*字符串中的每个空格替换成"%20",例如输入"We are happy.",则输出"We%20are%20happy." 时间复杂度为O(n)的解法思路: 首先遍历字符串,得到字符串长度or

1.4字符串 空格替换

1 class Replacement { 2 public: 3 string replaceSpace(string iniString, int length) { 4 // write code here 5 for(int m=0;m<iniString.size();) 6 { 7 int i=iniString.find(" ",m); 8 if(i==-1) 9 return iniString; 10 iniString.replace(i,1,"%2

《剑指Offer》替换空格(将字符串中的空格替换为%20)

题目: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy. 思路: 这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换. 看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节.这种解法的时间复杂度为O(n^2)!!! 另外一种较好的解法是从后往前替换,具体做法是从头遍历计算所有空格数,计算出总的长度. 该解

C语言之字符串数组空格替换

问题描述: 字符串替换空格:请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"we are happy.",则输出"we%20are%20happy.". 代码实现: #include <stdio.h> int replace(char *p) { #if 0  while(*p!='\0')  {   if(*p==' ')   {    printf("%%20");   }   else   

将字符串中的空格替换为%20

------------------------------------------------------------------------------------------------------ 例如:有字符串we are family,实现后的字符串为we%20are%20family. 如果从前向后,遇空格替换空格,那么family必将向后移动两次:那么我们可以从后向前实现, 先预留足够的空间,先移动family,再移动are,遇空格填充即可. ------------------

实现函数,用字符串&quot;%20&quot;替换空格

题目及要求: 请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"we are happy.",则输出"we%20are%20happy.". 思考过程:首先将定义一个指针,用于保存"%20",然后定义一个数组,用于接收从键盘上输入的字符串,边输入边判断,如果是空格,则替换,直至接收完毕. 程序: /* *实现一个函数,把字符串中的每个空格替换成"%20". *例如输入"we are 

剑指offer剖析__空格替换字符串问题

问题:在"we are happy"这个字符串中,将所有的空格替换成字符串%20. 分析:如果我们不定义一个新的字符数组,就在原字符数组中进行替换,要将一个字节的空格替换成三个字节的字符数组%20,这会产生数组的越界访问,如果允许我们开辟一个新的空间来存放替换后的字符串,则问题将会变得非常简单. 设置两个指针分别指向新旧字符串首元素,遍历原字符串,如果碰到空格就在新字符串上填入"%20",否则就复制元字符串上的内容. #include <stdio.h>

请实现一个函数,把字符串中的每个空格替换成“%20”

请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"we are happy.",则输出"we%20are%20happy." #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char arr[] = "we are happy"; int i = 0; int j = 0; int len