1. 程式人生 > >刷題5 替換空格

刷題5 替換空格

app pan 字符串 char ace 空格 log news pre

問題描述: 請實現一個函數,將一個字符串中的空格替換成“%20”。例如,當字符串為We Are Happy.則經過替換之後的字符串為We%20Are%20Happy。

最初實現(添加了一些檢測):

 1 class Solution {
 2 public:
 3     void replaceSpace(char *str,int length) 
 4     {
 5         if(str == NULL || length < 0)
 6             return;
 7         int oldLen = 0
; // 舊字符個數 8 int spaceSum = 0; // 記錄空格數量 9 for(int i = 0; str[i] != \0; i++) 10 { 11 if (str[i] == ) 12 spaceSum++; 13 oldLen++; 14 } 15 16 int newLen = 2 * spaceSum + oldLen; 17 if(newLen > length)
18 return; 19 int j = oldLen; 20 int k = newLen; 21 while( j >= 0 && k > j) 22 { 23 if(str[j] == ) 24 { 25 j--; 26 str[k--] = 0; 27 str[k--] = 2; 28 str[k--] =
%; 29 } 30 else 31 { 32 str[k--] = str[j--]; 33 } 34 } 35 } 36 };

據說指針更快一些,那就修改成指針再刷一下題:

 1 void replaceSpace(char *str,int length) 
 2 {
 3     if(str == NULL || length < 0)
 4         return;
 5     int oldLen = 0;  // 舊字符個數
 6     int spaceSum = 0;  // 記錄空格數量
 7     for(int i = 0; str[i] != \0; i++)
 8     {
 9         oldLen++;
10         if (str[i] ==  )
11             ++spaceSum;
12     }
13         
14     int newLen = 2 * spaceSum + oldLen;
15     if(newLen > length)
16         return;
17     char* OldStr = str + oldLen;
18     char* NewStr = str + newLen;
19     while( NewStr > OldStr)
20     {
21         if(*OldStr ==  )
22         {
23             *NewStr-- = 0;
24             *NewStr-- = 2;
25             *NewStr-- = %;
26         }
27         else
28         {
29             *NewStr-- = *OldStr;
30         }
31         --OldStr;
32     }
33 }

刷題5 替換空格