【劍指offer】05替換空格,C++實現


1.題目

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

 2.思路

# 從頭到尾遍歷字符串做替換,時間復雜度為O(n2),效率低

# 從尾到頭遍歷字符串做替換,時間復雜度為O(n),效率高

 3.舉例(從尾到頭遍歷字符串)

# 邊界檢查,判斷字符數組是否為空

# 遍歷字符串,統計空格總數count_space,統計替換前字符個數count_old,統計替換后字符個數count_new,其中count_new = count_old + 2*count_space

# 邊界檢查,判斷字符數組是否越界

# 替換空格,用指針P1指向原始字符串的末尾,指針P2指向替換后字符串的末尾。向前移動指針P1,如果P1指向的元素不是空格,則將P1指向的元素復制給P2指向的位置;如果P1指向的元素是空格,則P2依次向前移動並插入%20。當P1==P2時,結束替換。

                                                                                                          劍指Offer(二):替換空格

4.code

# C++字符數組存儲字符串,字符數組中編譯器自動添加字符串的結束標識’\0’,字符串結束標識在字符數組中占一個位置,注意字符數組的越界問題。

  1 class Solution {
  2 public:
  3     // 指向字符數組的字符指針str,字符數組長度length
  4 	void replaceSpace(char *str,int length) {
  5 
  6         // 邊界檢查1:判斷字符數組是否為空
  7 	    if(str==NULL)
  8             return ;
  9         // 遍歷字符串,統計空格個數、替換前字符個數、替換后字符個數
 10         int CountOfBlanks=0; // 空格個數
 11         int Originallength=0;// 替換前字符個數
 12         int len=0;           // 替換后字符個數
 13 
 14         for(int i=0;str[i]!='\0';++i)
 15         {
 16             Originallength++;
 17             if(str[i]==' ')
 18                 ++CountOfBlanks;
 19         }
 20 
 21         len =Originallength+2*CountOfBlanks;
 22 
 23         // 邊界檢查2:判斷字符數組是否越界
 24         if(len+1>length)
 25              return ;
 26 
 27         // 替換空格
 28         char*pStr1=str+Originallength;// 字符指針指向原始字符串的末尾
 29         char*pStr2=str+len;           // 字符指針指向替換后字符串的末尾
 30 
 31         while(pStr1 != pStr2)         // 替換結束的條件
 32         {
 33             if(*pStr1==' ')
 34             {
 35                 *pStr2--='0';
 36                 *pStr2--='2';
 37                 *pStr2--='%';
 38             }
 39             else
 40             {
 41                 *pStr2--=*pStr1;
 42             }
 43             --pStr1;
 44         }
 45 	}
 46 };


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM