1. <dd id="qfst8"><pre id="qfst8"></pre></dd>
      <nav id="qfst8"><sub id="qfst8"><noframes id="qfst8"></noframes></sub></nav>
      <tbody id="qfst8"><pre id="qfst8"></pre></tbody>

      <dd id="qfst8"><track id="qfst8"></track></dd>
        1. 首頁 > 試題廣場 > 替換空格
          [編程題]替換空格
          請實現一個函數,將一個字符串中的每個空格替換成“%20”。例如,當字符串為We Are Happy.則經過替換之后的字符串為We%20Are%20Happy。
          推薦
          //思路
          //1:從前往
             查看全部
          編輯于 2015-12-07 18:51:44 回復(260)
          /*
          問題1:替換字符串,是在原來的字符串上做替換,還是新開辟一個字符串做替換!
          問題2:在當前字符串替換,怎么替換才更有效率(不考慮java里現有的replace方法)。
          	  從前往后替換,后面的字符要不斷往后移動,要多次移動,所以效率低下
                從后往前,先計算需要多少空間,然后從后往前移動,則每個字符只為移動一次,這樣效率更高一點。
          */
          public class Solution {
              public String replaceSpace(StringBuffer str) {
              	int spacenum = 0;//spacenum為計算空格數
          		for(int i=0;i<str.length();i++){
          			if(str.charAt(i)==' ')
          				spacenum++;
          		}
          		int indexold = str.length()-1; //indexold為為替換前的str下標
          		int newlength = str.length() + spacenum*2;//計算空格轉換成%20之后的str長度
          		int indexnew = newlength-1;//indexold為為把空格替換為%20后的str下標
          		str.setLength(newlength);//使str的長度擴大到轉換成%20之后的長度,防止下標越界
          		for(;indexold>=0 && indexold<newlength;--indexold){  
          				if(str.charAt(indexold) == ' '){  //
          				str.setCharAt(indexnew--, '0');
          				str.setCharAt(indexnew--, '2');
          				str.setCharAt(indexnew--, '%');
          				}else{
          					str.setCharAt(indexnew--, str.charAt(indexold));
          				}
          		}
          		return str.toString();
              }
          }

          發表于 2016-05-17 18:10:46 回復(60)

          思路:從前向后記錄‘ ’數目,從后向前替換‘ ’。 重點:從后向前替換的時候的技巧 例如:“we are lucky”

          0 1 2 3 4 5 6 7 8 9 10 11
          w e a r e l u c k y
          

          可以得知count=2;//空格的個數。 所以在替換的時候7~11的字母要向后移動count×2個位置,3~5字母要向后移動(count-1)×2個位置。 所以得到 :

          0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
          w e   a r e   l u c  k y 
          w e   a r a r e u c  k l u c k y
          

          在替換的時候直接在空格處寫入%20了

          0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
          w e   a r e   l u c  k y 
          w e % 2 0 a r e % 2  0 l u c k y
          
          class Solution {
          public:
              void replaceSpace(char *str,int length) {
                  int count=0;
                  for(int i=0;i<length;i++){
                      if(str[i]==' ')
                          count++;
                  }
                  for(int i=length-1;i>=0;i--){
                      if(str[i]!=' '){
                          str[i+2*count]=str[i];
                      }
                      else{
                          count--;
                          str[i+2*count]='%';
                          str[i+2*count+1]='2';
                          str[i+2*count+2]='0';
                      }
                  }
              }
          };
          
          發表于 2017-04-14 11:44:26 回復(55)
          用的java
          public class Solution {
              public String replaceSpace(StringBuffer str) {
                  StringBuffer out=new StringBuffer();
                  for (int i = 0; i < str.toString().length(); i++) {
                      char b=str.charAt(i);
                      if(String.valueOf(b).equals(" ")){
                          out.append("%20");
                      }else{
                          out.append(b);
                      }
                  }
                  return out.toString();  	
              }
          }
          

          發表于 2015-09-22 11:57:46 回復(7)
          public class Solution {
              public String replaceSpace(StringBuffer str) {
                  String sti = str.toString();
              	char[] strChar = sti.toCharArray();
                  StringBuffer stb = new StringBuffer();
                  for(int i=0;i<strChar.length;i++){
                      if(strChar[i]==' '){
                          stb.append("%20");
                      }else{
                          stb.append(strChar[i]);
                      }
                  }
                  return stb.toString();
              }
          }

          發表于 2015-08-25 19:53:36 回復(31)
          分析:先轉為string,然后處理完成后再轉為char *。但不是以返回值的形式,還要利用好原來的空間,用strcpy實現之。處理過程循環查找,每次找到就替換,且把每次的找到的結果當成下一次的參數,避免重復從頭查找。

          class Solution {
          public:
          	void replaceSpace(char *str,int length) {
                  string s(str);
                  int i=0;
          		while((i=s.find(' ',i))>-1){
          			s.erase(i,1);
                      s.insert(i,"%20");
                      
                  }
                  auto ret=s.c_str();
                  strcpy(str,ret);
          	}
          };

          發表于 2017-08-20 03:18:51 回復(10)
          RX頭像 RX
          public class Solution {
              public String replaceSpace(StringBuffer str) {
              	return str.toString().replaceAll("\\s", "%20");
              }
          }

          發表于 2015-10-28 17:56:38 回復(60)
          
           這個題目是不是有問題? 如果 char *str 申請的空間是大于 length 且足夠容納替換后的字符串就萬事大吉. 如果空間不夠,
          則必然不能原地替換, 這樣也就是需要修改指針 str 指向的地址, 在傳值傳參的情況下, 對 str 的修改根本不可能被調用者發現.
          
          發表于 2015-08-18 14:45:43 回復(25)
          不知道能不能用Python,反正很方便

          # -*- coding:utf-8 -*-
          class Solution:
          ? ? # s 源字符串
          ? ? def replaceSpace(self, s):
          ? ? ? ? return "%20".join(list(s.split(" ")))
          ? ? ? ??
          發表于 2018-04-03 11:24:24 回復(6)
          題目考查的肯定不是用replace函數啦~
          思路是:從左到右遍歷,從右到左替換。

          class Solution {
          public:
          void replaceSpace(char *str,int length) {
          for(int i = 0; i < length; i ++){
          ? ? ? ? ? ? if(*(str+i) == ' '){
          ? ? ? ? ? ? ? ? length += 2;
          ? ? ? ? ? ? ? ? int j = length -1;
          ? ? ? ? ? ? ? ? while(j-2 > i){
          ? ? ? ? ? ? ? ? ? ? *(str+j) = *(str+j-2);
          ? ? ? ? ? ? ? ? ? ? j--;
          ? ? ? ? ? ? ? ? }
          ? ? ? ? ? ? ? ? *(str+i) = '%';
          ? ? ? ? ? ? ? ? *(str+i+1) = '2';
          ? ? ? ? ? ? ? ? *(str+i+2) = '0';
          ? ? ? ? ? ? }
          ? ? ? ? }
          }
          };

          發表于 2015-08-31 22:13:12 回復(19)
          Java 一行搞定啊
          public class Solution {
          ? ? public String replaceSpace(StringBuffer str) {
          ? ? ?return str.toString().replaceAll(" " , "%20");
          ? ? }
          }

          JavaScript
          function replaceSpace(str)
          {
          ? ? var resStr = str.replace(/ /g, "%20");
          ? ? return resStr;
          }
          發表于 2017-09-04 10:52:56 回復(7)
          class Solution {
          public:
          	void replaceSpace(char *str,int length) {
          		int spaceNum=0;
                  
                  for(int i=0;i<length;i++)
                  {
                      if(str[i]==' ')
                          spaceNum++;
                      
                  }     
                  
                  int newIndex=length+2*spaceNum;
                  char *index=str+length;
          		while(index>=str)
                  {
                      if(*index==' ')
                      {
                          str[newIndex--]='0';
                          str[newIndex--]='2';
                          str[newIndex--]='%';
                      }
                      else{
                          str[newIndex--]=*index;
                      }
                      index--;
                  }
              }
          };

          發表于 2015-09-27 00:11:08 回復(11)

          很簡單啊,有漏洞嗎

          # -*- coding:utf-8 -*-
          class Solution:
              # s 源字符串
              def replaceSpace(self, s):
                  # write code here
                  new_s = ''
                  for j in s:
                      if j == ' ':
                          new_s=new_s + '%20'
                      else:
                          new_s=new_s + j
                  return new_s
          
          發表于 2018-03-05 22:55:37 回復(7)
          第二遍自己做發現了更簡單的辦法喲~
          public class Solution {
              public String replaceSpace(StringBuffer str) {
                  String s = str.toString();
                  if(str==null)
                      return s;
                   char []ss=s.toCharArray();
                  StringBuffer sb = new StringBuffer();
                  for(int i=0;i<ss.length;i++)
                      {
                      if(ss[i]==' ')
                          {
                           sb.append("%20");
                      }
                     else 
                         sb.append(ss[i]);
                  }
                  return sb.toString();
              }
          }

          發表于 2017-06-23 17:08:34 回復(5)
          public class Solution {
          ? ? public String replaceSpace(StringBuffer str) {
          ? ? ????StringBuffer st = new StringBuffer();
          ? ? ? ? for(int i = 0; i < str.length() ; i++){
          ? ? ? ? ? ? char s = str.charAt(i);
          ? ? ? ? ? ? if(String.valueOf(s).equals(" ")){
          ? ? ? ? ? ? ? ? st.append("%20");
          ? ? ? ? ? ? }
          ? ? ? ? ? ? else{
          ? ? ? ? ? ? ? ? st.append(s);
          ? ? ? ? ? ? }
          ? ? ? ? }
          ? ? ? ? return st.toString();
          ? ? }
          }
          

          發表于 2018-07-07 19:54:53 回復(0)
          public? String replaceSpace(StringBuffer str) {
          ?? ??? ?
          ?? ??? ?return str.toString().replaceAll("\\s","%20");
          }
          
          使用正則表達式替換
          

          發表于 2017-03-17 12:56:06 回復(5)
          # -*- coding:utf-8-*-
          classSolution:
          ????# s 源字符串
          ????def replaceSpace(self, s):
          ???????return?s.replace(' ','%20')
          發表于 2016-01-31 12:00:09 回復(4)
          弄個隊列先把字符串進隊,依次出隊,遇到空格連接%20字符串,繼續出隊
          發表于 2016-03-29 15:14:25 回復(4)
          package alex.suda.jzOffer;
          
          import java.util.Scanner;
          
          public class ReplaceSpace {
          
          	/**
          	 * @param args
          	 */
          	public static void main(String[] args) {
          		// TODO Auto-generated method stub
          		Scanner scanner = new Scanner(System.in);
          		while (scanner.hasNext()) {
          			String s = scanner.nextLine();
          			StringBuffer str = new StringBuffer(s);
          			System.out.println(replaceSpace(str));
          		}
          	}
          
          	public static String replaceSpace(StringBuffer str) {
          		if (str == null) {
          			return null;
          		}
          		int blankNum = 0;
          		int length = str.length();
          		int newLength = 0;
          		for (int i = 0; i < length; i++) {
          			if (str.charAt(i) == ' ') {
          				blankNum++;
          			}
          		}
          		newLength = length + 2 * blankNum;//替換后的字符串長度
          		char[] newChars = new char[newLength];//新的字符數組
          		int index = newLength - 1;
          		for(int i=length-1;i>=0;i--) {
          			if (str.charAt(i) == ' ') {
          				newChars[index--] = '0';
          				newChars[index--] = '2';
          				newChars[index--] = '%';
          			} else {
          				newChars[index--] = str.charAt(i);	
          			}
          		}
          		return new String(newChars);
          	}
          }
          


          發表于 2016-11-16 16:54:07 回復(1)
          package HuaWei;
          public class Replace {
           /**
           * 請實現一個函數,將一個字符串中的空格替換成“%20”。
           * 例如,當字符串為We Are Happy.則經過替換之后的字符串為We%20Are%20Happy。
           */
           public static void main(String[] args) {
           String s = "We Are Happy";
           re(s);
           }
           public static void ?re(String s ){
           String[] all = s.split(" ");
           StringBuffer sb = ?new StringBuffer();
           StringBuffer sb1 = new StringBuffer();
           for(int i = 0;i<all.length;i++){ 
           if(i!=all.length-1){
           sb1.append(all[i]+"%20");
           }
           else
           sb1.append(all[i]);
           }
           System.out.println(sb.append(sb1));
           }
          }

          發表于 2015-04-08 22:03:43 回復(0)
          string replaceSpace(string iniString, int length) 
          {
          	string newString;
          	for(int i=0;i<length;i++)
          	{
          		if(iniString[i]==' ')
          		   {
          		   	 //newString+=iniString[i];
          		     newString=newString+"%20"; 
          		     continue;
          		   }
          		newString+=iniString[i];
          	}
          	return newString; 
          } 

          發表于 2016-07-23 23:32:54 回復(11)
          微拍福利