首页 > 试题广场 > 替换空格
[编程题]替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
推荐
//思路
//1:从前往后插入,这样移动·的次数多不建议
//2:从后往前插入

class Solution {
public:
void replaceSpace(char *str,int length) {
        //遍历一边字符串找出空格的数量
        if(str==NULL||length<0)
            return ;
        int i=0;
        int oldnumber=0;//记录以前的长度
        int replacenumber=0;//记录空格的数量
        while(str[i]!='\0')
            {
               oldnumber++;
               if(str[i]==' ')
                   {
                     replacenumber++;
                   }
                  i++; 
            }
        int newlength=oldnumber+replacenumber*2;//插入后的长度
        if(newlength>length)//如果计算后的长度大于总长度就无法插入
            return ;
        int pOldlength=oldnumber; //注意不要减一因为隐藏个‘\0’也要算里
        int pNewlength=newlength;
        while(pOldlength>=0&&pNewlength>pOldlength)//放字符
            {
              if(str[pOldlength]==' ') //碰到空格就替换
                  {
                     str[pNewlength--]='0';
                     str[pNewlength--]='2';
                     str[pNewlength--]='%';
                     
                  }
               else //不是空格就把pOldlength指向的字符装入pNewlength指向的位置
               {
                    str[pNewlength--]=str[pOldlength];
                   
               }
             pOldlength--; //不管是if还是elsr都要把pOldlength前移
             
           }
        

}
};
编辑于 2015-12-07 18:51:44 回复(252)
import re
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        r = re.sub(' ','%20',s)
        return r



正则。。。
发表于 今天 10:49:07 回复(0)
本题基本思路是从后往前,首先遍历一遍,计算有多少空格,然后在字符串后面扩容空格数*3的空间,最后设定两个指针,一个指向原先字符串最后一个的位置,一个指向扩容后最后一个的位置。前一个指针不断向前移动,如果遇到正常字符,则复制到后一个指针指向的区域,如果是空格,则后一个指针往前共三格(包含当前指针位置)填充’%20‘,同时该指针往前跳三个,每次循环,前指针均往前移动一格,一直到小于零结束。返回字符串。需要注意的是,python里面单纯字符串不好替换,转换成列表就好处理了,最后转换回字符串就行。附上源代码。

# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        s = list(s)
        spacenum = 0
        for c in s:
            if c==' ':
                spacenum += 1
        extraspace = spacenum*2
        s = s + [' ']*extraspace
        slen = len(s)
        search_p = slen-extraspace-1
        store_p = slen-1
        while(search_p>=0):
            if s[search_p] == ' ':
                s[store_p-2:store_p+1] = '%20'
                store_p  = store_p-3
            else:
                s[store_p] = s[search_p]
                store_p = store_p - 1
            search_p = search_p-1
        return ''.join(s)
发表于 2019-07-18 22:54:24 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        count = 0
        for si in s:
            if si == ' ':
                count += 1
        new_len = len(s) + count*2
        new_s = [0] * new_len
        p1 = len(s)-1
        p2 = new_len - 1
        while p1 >= 0 and p2 >=0:
            if s[p1] == ' ':
                new_s[p2]= '0'
                new_s[p2-1]= '2'
                new_s[p2-2]= '%'
                p2 -= 3
            else:
                new_s[p2]= s[p1]
                p2 -= 1
            p1 -= 1
        return ''.join(new_s)
        '''
        if ' ' in s:
            s = s.replace(' ', '%20') 
        return s
        '''
发表于 2019-07-07 10:38:52 回复(0)
"""
方案一
""" class Solution: def replaceSpace(self, s): # 原地修改 s = s.replace(' ', '%20') return s """ 方案二  """ class Solution: def replaceSpace(self, s): tr = ' '  # 创建一个空串 for item in range(len(s)): # 遍历s if s[item] == ' ':  # 判断是否为空 tr += '%20'  # 在新串中累加 else: tr += s[item]  # 在新串中累加不为空的 return str



编辑于 2019-07-06 15:58:51 回复(1)
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        s = str(s)
        s = s.replace(' ', '%20')
        return s
感觉python的字符串处理太强大了。。。
发表于 2019-07-03 09:28:17 回复(0)
def info2():      str_info="We Are Happy"  str_replace=str_info.replace(" ","%20")
    return str_replace

编辑于 2019-06-26 12:29:27 回复(0)
其他语言我不知道,对于Python来说,从后往前,这种复杂的操作是一种多余,字符串是不可变对象,势必要分配新的空间达成目标。算法嘛,学一学思想就好,用到适当的地方才是对的。
class Solution:
        def replaceSpace(self, s):
        # write code here
        if not isinstance(s,str)or len(s) <= 0 or s == None:
            return ''
        space_num = 0
        for i in s:
            if i == ' ':
                space_num += 1
        new_len = len(s) + space_num*2
        new_str = [None]*new_len
        i = 0
        for j in range(len(s)):
            if s[j] == ' ':
                new_str[i:i+3] = ['%','2','0']
                i += 3
            else:
                new_str[i] = s[j]
                    i += 1
        return ''.join(new_str)

编辑于 2019-06-24 08:48:00 回复(0)
python 思路:
一条指令解决,split()函数表示按照什么切分字符串,str.join(),表示以字符串str连接各个字符。
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        return '%20'.join(s.split(' '))

发表于 2019-06-23 20:18:28 回复(0)
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        i=0
        while(i!=len(s)):
            if s[i] == ' ':
                s=s[0:i]+'%20'+s[i+1:]
                i+=2
            i+=1
        return s

发表于 2019-06-04 17:40:51 回复(0)
py大法好...
return(char.replace(' ','%20'))

发表于 2019-05-10 15:15:45 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        s2 = []
        for i in range(len(s)):
            if s[i] == ' ':
                s2.append("%20")
            else:
                s2.append(s[i])
        return "".join(s2)

试试我这个做法
发表于 2019-04-08 13:56:03 回复(0)
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        list = []
        list = s.split(' ')
        n = len(list)
        new_s = list[0]
        for v in range(1, n):
            new_s += '%20'
            new_s += list[v]
        return new_s
        
S = Solution()
while True:
    try:
        my_str = raw_input()
        print(S.replaceSpace(my_str))
    except:
        break
发表于 2019-03-28 16:45:52 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        rep_str = '%20' # 替换的字符
        space_nums = 0 # 空格个数
        for i in s:
            if i == ' ':
                space_nums += 1
        lens = len(s) # 原始字符串长度
        rep_lens = lens+(len(rep_str)-1)*space_nums # 替换后的长度
        s = list(s)+['0']*(rep_lens-lens)
        p1 = lens-1 # p1指向原始字符串最后一位
        p2 = rep_lens-1 # p2指向替换后字符串的最后一位
        while p1 != p2:
            if s[p1] != ' ':
                s[p2] = s[p1]
                p1 -= 1
                p2 -= 1
            else:
                s[(p2-len(rep_str)+1):(p2+1)] = rep_str
                p2 = p2-len(rep_str)
                p1 -= 1
        return ''.join(s)
发表于 2019-03-24 01:08:44 回复(0)
python3种方法:
 
1:
class Solution:
 # s 源字符串
 def replaceSpace(self, s):
 # write code here
 s=list(s)
 for i,item in enumerate(s):
 if item == " ":
 s[i]='%20'
 return "".join(s)
2:
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        return s.replace(" ","%20")

3:
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        originalLength=len(s)
        blankNum=0
        for item in s:
            if item==" ":
                blankNum+=1
        newLength=originalLength+blankNum*2
        s=list(s)
        s+=['#']*2*(blankNum+1)
        while originalLength>=0 and newLength>=originalLength:
            if s[originalLength]==" ":
                s[newLength]="0"
                newLength-=1
                s[newLength]='2'
                newLength-=1
                s[newLength]="%"
                newLength-=1
            else:
                s[newLength]=s[originalLength]
                newLength-=1
            originalLength-=1
        return "".join(s).rstrip('#')


编辑于 2019-04-03 11:10:54 回复(0)
Python,一行搞定:
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        return s.replace(' ', "%20")

发表于 2019-03-19 17:11:57 回复(0)
class Solution:
    def replaceSpace(self, s):
        string =''
        for i in s:
            if i == ' ':
                i= '%20'
                string +=i
            else:
                string +=i
        return string
发表于 2019-03-17 22:25:47 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        temp = s.split(" ")
        results = ""
        length = len(temp)
        for i in range(length):
            results += temp[i]
            if i < (length -1):
                results += "%20"
        return results

发表于 2019-03-14 11:40:58 回复(0)
# -*- coding:utf-8 -*- class Solution:  # s 源字符串  def replaceSpace(self, s):  # write code here  res= ''  for charin s:  if char== ' ':  res+= '%20'  else:  res +=char returnres

发表于 2019-03-12 16:39:15 回复(0)

python

    def replaceSpace(self, s):
        # write code here
        if not s:
            return s
        if not isinstance(s,str):
            return
        s1 = ''
        for item in s:
            if item == ' ':
                s1 += '%20'
            else:
                s1 += item
        return s1

申请一个临时字符串,去遍历输入的字符串,遇到空格,在临时字符串后面拼接 '%20',否则,在临时字符串后面拼接原字符串的原始字符串

发表于 2019-03-09 17:50:51 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        return s.replace(' ',"%20")
        

发表于 2019-03-09 17:08:36 回复(0)