劍指offer之替換空格

1.題目描述

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

2.問題分析

修改字符串的幾個注意點:

  1. 如果字符串是內存中的常量區,我們使不允許修改的;
  2. 修改字符串我們要主要字符串的長度問題,不要越界;
  3. 字符串後面有一個’\0’標識符,我們需要複製。

程序的分析在代碼註釋裏面,看源代碼

3.代碼

void replaceSpace(char *str,int length) {
    if(str == NULL)
        return;
    //字符串長度
    int len = 0;
    //空格長度
    int countSpace = 0;
    //指向字符串首地址
    char* p = str;

    while(*p != '\0')
    {
        //統計字符串中空格長度
        if(*p == ' ')
            ++countSpace;
        //地址後移
        ++p;
        //統計字符串長度
        ++len;
    }
    //新字符串長度
    int realLen = len + 2 * countSpace;
    //重新指向字符串首地址
    p = str;
    //從後向前替換字符串,注意我們需要把原字符串中的'\0'也拷貝到新的字符串中,所以從地址p + len開始
    for(int i = len; i >= 0; --i)
    {
        if(*(p + i) != ' ')
            *(p + realLen--) = *(p + i);
        else
        {
            *(p + realLen--) = '0';
            *(p + realLen--) = '2';
            *(p + realLen--) = '%';
        }
    }
}
發佈了84 篇原創文章 · 獲贊 55 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章