首页 > 试题广场 >

空格替换

[编程题]空格替换
  • 热度指数:59874 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个string iniString 及其长度 int len, 已知该字符串中有空格,现要求编写程序将字符串中空格替换为“%20”。返回更改后的string。假设该字符串有足够的空间存放新增的字符,并且知道原字符的长度(小于等于1000),同时保证字符串由大小写的英文字母组成。

示例1

输入

"Mr John Smith",13

输出

"Mr%20John%20Smith"
示例2

输入

"Hello  World",12

输出

"Hello%20%20World"
我觉得直接在定义一个字符串,碰到不是空格的就加进去,是空格的就变成加“%20”不就好了吗。。。。
class Replacement {
public:
    string replaceSpace(string iniString, int length) {
        string final;
        for (int i = 0; i < length; i++)
        {
            if (iniString[i]==' ')
            {
                final += "%20";
            }
            else if (iniString[i]!=' ')
            {
               final += iniString[i];
            }
        }
        return final;
    }
};


发表于 2020-02-10 13:54:35 回复(0)
string replaceSpace(string iniString, int len)
{
	string s;
	for (auto i : iniString)
	{
		if (i == ' ')
		{
			s += "%20";
		}
		else
		{
			s += i;
		}
	}

	return s;
}


没有额外要求,直接+即可~
发表于 2019-09-03 20:14:27 回复(0)
垃圾牛客,人家原书输入的是char数组,然后原地改。。。
发表于 2019-06-14 14:49:45 回复(0)

为什么没有人发现这道题目的Java版有问题?

我是对照着书来做的题目。

这道题目的本意是为了考察数组内的移动,本身题目的参数就给得有问题

我认为题目应该是这样的:

public String replaceSpaceA(char[] iniCharArr, int length) {
        // 计算出新的长度
        int spaceCount = 0;
        for (int i = 0; i < length; i++) {
            if (iniCharArr[i] == ' ') {
                spaceCount ++;
            }
        }
        // 从后面开始移起
        int startIndex = length - 1;
        int newLengthIndex = length + spaceCount * 2 -1;
        while (startIndex != newLengthIndex) {
            char moveChar = iniCharArr[startIndex];
            if (moveChar == ' ') {
                iniCharArr[newLengthIndex] = '0';
                iniCharArr[newLengthIndex-1] = '2';
                iniCharArr[newLengthIndex-2] = '%';
                newLengthIndex -= 3;
            } else {
                iniCharArr[newLengthIndex] = moveChar;
                newLengthIndex--;
            }
            startIndex--;
        }
        // 要截取一下,否则会通不过测试
        return new String(iniCharArr, 0, length + spaceCount * 2);
    }
编辑于 2019-01-18 02:32:58 回复(1)
了解string 的insert 和 replace 就很简单了

class Replacement {
public:
    string replaceSpace(string iniString, int length) {
        // write code here
        if (length <= 0)
        {
            return iniString;
        }
        
        for (size_t i=0; i < iniString.size(); i++)
        {
            if (iniString[i] == ' ')
            {
                iniString.replace(i,1,"%20",3);
            }
        }
        return iniString;
    }
};
发表于 2018-04-15 13:56:47 回复(0)
class Replacement {
public:
string replaceSpace1(string iniString, int length) {//先在空格处插入%20,再删除空格
// write code here
for (int i = 0; i < iniString.size(); i++){
if (iniString[i] == ' '){
iniString.insert(i, "%20");
i += 3;
}
}
for (int i = 0; i < iniString.size(); i++){
if (iniString[i] == ' '){
iniString.erase(i, 1);
}
}
return iniString;
}
string replaceSpace2(string iniString, int length) { //建立一个新字符串,将iniString元素一个一个写入,其中遇到空格写入%20
// write code here
string newString ;
for (int i = 0; i < iniString.size(); i++){
if (iniString[i] == ' ')
newString.operator+=("%20");//newString.append( "%20");
else
newString.operator+=(iniString[i]);//newString.push_back (iniString[i]);
}
return newString;
}
};

发表于 2017-08-18 23:35:22 回复(0)
//方式一:
    public String replaceSpace(String iniString, int length) {
        if(iniString==null||"".equals(iniString)||length<=0) return iniString;
        return iniString.replace(" ","%20");
    }
 //方式二
     public String replaceSpace(String iniString, int length) {
        if(iniString==null||"".equals(iniString)||length<=0||iniString.length()!=length) return iniString;
         StringBuffer sb=new StringBuffer("");
         for(int i=0;i<length;i++){
             if(iniString.charAt(i)==' ') sb.append("%20");
             else sb.append(iniString.charAt(i));
         } 
         return sb.toString();
     }
//方法三:一样的道理
 public String replaceSpace(String iniString, int length) {
        if(iniString==null||"".equals(iniString)||length<=0||iniString.length()!=length) return iniString;
          StringBuffer str=new StringBuffer(iniString);
          str.insert(0,'#');
          str.append('#');
          String[] value=str.toString().split(" ");
          StringBuffer sb=new StringBuffer();
         for(int i=0;i<value.length;i++){
             sb.append(value[i]);
             if(i==value.length-1) break;
             else sb.append("%20");
         } 
          sb.deleteCharAt(0);
          sb.deleteCharAt(sb.length()-1);
         return sb.toString();
     }

编辑于 2017-05-10 16:24:19 回复(0)
//只能想到比较笨的办法,时间复杂度o(n)
public class Replacement {
    public String replaceSpace(String iniString, int length) {
        // write code here
        if(iniString==null||length==0){
            return null;
        }
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<length;i++){
            if(iniString.charAt(i)==' '){
                sb.append("%20");
            }else{
                sb.append(iniString.charAt(i));
            }
        }
        return sb.toString();
    }
}

发表于 2017-01-16 15:33:40 回复(0)
import java.util.*;

public class Replacement {
    public String replaceSpace(String iniString, int length) {
        // write code here
        if (iniString == null || length <=0)
            return null;
        StringBuilder sb = new StringBuilder();
        for (int i=0; i<length; i++){
            if (iniString.charAt(i) == ' '){
                sb.append('%');
	            sb.append('2');
                sb.append('0');
            }
            else
                sb.append(iniString.charAt(i));
        }
        return sb.toString();
    }
}

发表于 2016-12-30 10:42:04 回复(0)
# -*- coding:utf-8 -*-
class Replacement:
    def replaceSpace(self, iniString, length):
        # write code here
        l = list()
        i = 0
        while i < length:
            if iniString[i] == ' ':
                l.append('%20')
            else:
                l.append(iniString[i])
            i += 1
        newstr = ''.join(l)
        return newstr

发表于 2016-08-25 20:51:59 回复(1)
class Replacement {
public:
    string replaceSpace(string iniString, int length) {
     while (iniString.find(" ") != -1){
		iniString = iniString.replace(iniString.find(' '), 1, "%20");
	}
	 return iniString;
    }
};// find repalce方法

发表于 2016-08-21 11:31:17 回复(0)
import java.util.*;

public class Replacement {
    public String replaceSpace(String iniString, int length) {
        StringBuilder sb = new StringBuilder();
		for(char c : iniString.toCharArray()){
			if(c == ' '){
				sb.append("%20");
			} else {
				sb.append(c);
			}
		}
		return sb.toString();
    }
}

发表于 2016-08-05 21:52:12 回复(0)
import java.util.*;

public class Replacement {
    public String replaceSpace(String iniString, int length) {
       return iniString.replace(" ", "%20");
    }
}
编辑于 2017-04-02 13:54:18 回复(0)
class Replacement {
public:
    string replaceSpace(string iniString, int length) {
        // write code here
        string str ="";
        for(int i = 0 ;i <length;i++){
            if(iniString[i]!=' ')  
            str.push_back(iniString[i]);
            else{
    
                str.push_back('%');
str.push_back('2');
str.push_back('0');
                
            }
                
              
        }
        return str;
    }
};
发表于 2016-07-04 11:51:30 回复(0)
class Replacement {
public:
    string replaceSpace(string iniString, int length) {
        string s;
        int j=0;
        for(int i=0;i<length;i++)
            {
            if(iniString[i]==' ')
              
            {
                s[j]+="%20";
            	j+=3;
            }else 
                {
                s[j]=iniString[i];
                j++;
            }
}
        return s;
    }
};

发表于 2016-06-09 21:28:19 回复(2)
class Replacement {
public:
string replaceSpace(string iniString, int length) {
// write code here
string result;
for(int i = 0; i < length; i++) {
if(iniString[i] == ' ') {
result += "%20";
} else {
result += iniString[i];
}
}
return result;
}
};
编辑于 2016-04-28 14:50:42 回复(0)
class Replacement {
public:
    string replaceSpace(string iniString, int length) {
        // write code here
        for(int i = 0; i < length; i++){
            if(iniString[i] == ' '){
                iniString.push_back('0');
                iniString.push_back('0');
            }
        }
        
        int siz = iniString.size();
        int pos = siz - 1;
        for(int i = length-1; i >= 0; i--){
            if(iniString[i] != ' '){
                iniString[pos--] = iniString[i];
            }
            else{
                iniString[pos--] = '0';
                iniString[pos--] = '2';
                iniString[pos--] = '%';
            }
        }
        
        return iniString;
    }
};

发表于 2016-04-27 15:32:11 回复(2)
发表于 2016-04-04 14:10:27 回复(1)
# -*- coding:utf-8 -*-
class Replacement:
    def replaceSpace(self, iniString, length):
        (2766)# write code here
        res = ""
        for i in range(length):
            if iniString[i] == ' ':
                res += "%20"
            else:
                res += iniString[i]
        return res

发表于 2020-03-17 23:06:58 回复(0)
我第一个想到的就是正则,但是鉴于目前正则用的还不好,就没用,用了replace, 下去要好好学学正则了

发表于 2017-05-18 07:59:23 回复(0)