首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言字符串空格替換:將空格替換為 %20 的兩種實現

     編輯:關於C語言

C 語言字符串空格替換:將空格替換為 %20 的兩種實現

經典面試題:實現函數將字符串中每個空格替換為 %20。例如 "we are happy" → "we%20are%20happy"。本文提供兩種思路:雙指針原地替換(從後向前)與輔助函數逐字符輸出。

一、 核心挑戰

  • 替換後字符串變長(1 字符 → 3 字符),必須確保目標緩衝區足夠大。
  • 若從前向後覆寫,會覆蓋未處理字符;故從後向前移動/寫入。

二、 方法一:雙指針原地替換(標準解法)

void replaceSpace(char *str, int bufferSize) {
    if (!str) return;
    int originalLen = 0, spaceCount = 0;
    while (str[originalLen] != '\0') {
        if (str[originalLen] == ' ') spaceCount++;
        originalLen++;
    }
    int newLen = originalLen + spaceCount * 2; // 每空格多 2 字符
    if (newLen + 1 > bufferSize) return; // 緩衝區不足

    int i = originalLen, j = newLen;
    str[j--] = '\0'; // 先寫結束符
    while (i >= 0) {
        if (str[i] == ' ') {
            str[j--] = '0';
            str[j--] = '2';
            str[j--] = '%';
        } else {
            str[j--] = str[i];
        }
        i--;
    }
}

關鍵點:先計算新長度、檢查緩衝區、從尾部向前填充、空格展開為 '%','2','0'。

三、 方法二:輔助函數逐字符判斷輸出(教學演示)

int checkSpace(char c) {
    return (c == ' ') ? 1 : 2; // 1=空格, 2=非空格
}

int main() {
    char arr[] = "we are happy.";
    char *p = arr;
    while (*p != '\0') {
        int ret = checkSpace(*p);
        if (ret == 1) printf("%%20");
        else printf("%c", *p);
        p++;
    }
    printf("\n");
    return 0;
}

此法僅演示邏輯,實際工程需寫入緩衝區而非直接 printf。

四、 測試驗證

int main() {
    char buf[100] = "we are happy.";
    replaceSpace(buf, sizeof(buf));
    printf("%s\n", buf); // 輸出: we%20are%20happy.
    return 0;
}

五、 總結

  • 面試必考:從後向前避免覆蓋、預計算長度防越界。
  • 工程實踐:優先用標準庫 str_replace 或動態字符串庫,手寫僅用於受限環境或面試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved