1. 程式人生 > >刷題筆記2——將字串中的空格替換為指定的字串

刷題筆記2——將字串中的空格替換為指定的字串

題目描述

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

1、方法1

通過一個string物件來將元素不斷加入其中,加完以後找出空格,刪除即可

內容介紹1

string轉char*的方法c_str(),返回一個指向正規C字串的指標,內容與本string串相同

注意:一定要使用strcpy()函式 等來操作方法c_str()返回的指標

c_str()例子

char* c; 
string s="1234"; 
c = s.c_str();  //c最後指向的內容是垃圾,因為s物件被析構,其內容被處理
應該這樣用: char c[20]; string s="1234"; strcpy(c,s.c_str()); // 這樣才不會出錯,c_str()返回的是一個臨時指標,不能對其進行操作

內容介紹2

erase函式的原型如下:
(1)string& erase ( size_t pos = 0, size_t n = npos );
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
也就是說有三種用法:
(1)erase(pos,n); 刪除從pos開始的n個字元,比如erase(0,1)就是刪除第一個字元
(2)erase(position);刪除position處的一個字元(position是個string型別的迭代器)
(3)erase(first,last);刪除從first到last之間的字元(first和last都是迭代器)

測試程式碼

class Solution {
public:
	void replaceSpace(char *str,int length) {
        std::string res;
        std::string tmp = "%20";
        for(int i = 0; i < length; ++i) {
            if(str[i] == ' ')
                res += tmp;
            res += str[i];
        }
        for(int i = 0; i <
res.size(); ++i) { if(' ' == res[i]) res.erase(i, 1); } strcpy(str, res.c_str()); } };

2、方法2

在這裡插入圖片描述

class Solution {
public:
	void replaceSpace(char *str,int length) {
        int cnt = 0;
        char *tmp = str;
        while(*tmp != '\0'){
            if(*tmp == ' ')
                cnt++;
            tmp++;
        }
        
        int newLength = length + 2*cnt;
        str[newLength] = '\0';
        char *p_srcEnd = str + length -1;
        char *p_newEnd = str + newLength -1;
        while(p_srcEnd != p_newEnd){
            if(*p_srcEnd != ' ') {
                *p_newEnd-- = *p_srcEnd--;
            } else {
                *p_newEnd-- = '0';
                *p_newEnd-- = '2';
                *p_newEnd-- = '%';
                p_srcEnd--;
            }
        }
	}
};