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

C語言字符串空格替換為 %20:原地後向掃描算法

     編輯:關於C語言

C語言字符串空格替換為 %20:原地後向掃描算法

將字符串中每個空格替換為 "%20"。假設數組空間足夠。關鍵:從後向前掃描,避免覆蓋未處理字符。

算法步驟

  1. 統計空格數 count
  2. 新長度 = 原長 + 2×count
  3. 雙指針:i 指向原末尾,j 指向新末尾
  4. 從後向前:非空格複製,空格寫入 "%20"
  5. 直到 i == j 結束

完整代碼

#include <stdio.h>
#include <string.h>

int main() {
    char arr[100] = "we are happy.";
    int len = strlen(arr);
    int count = 0;
    
    // 統計空格
    for (int i = 0; i < len; i++)
        if (arr[i] == ' ') count++;
    
    int i = len - 1;
    int j = len - 1 + 2 * count;
    arr[j + 1] = '\0';  // 新結束符
    
    while (i >= 0) {
        if (arr[i] == ' ') {
            arr[j--] = '0';
            arr[j--] = '2';
            arr[j--] = '%';
        } else {
            arr[j--] = arr[i];
        }
        i--;
    }
    
    printf("結果:%s\n", arr);
    return 0;
}

運行過程演示 ("we are happy.")

原串:w e   a r e   h a p p y .  (長13,2空格)
新長:13 + 4 = 17
i=12 j=16
步驟:從後向前複製/替換
結果:we%20are%20happy.

關鍵點

  • 必須從後向前,前向會覆蓋
  • 預留足夠空間 (題目假設)
  • 時間 O(n),空間 O(1) 額外
  • 面試高頻題 (剑指 Offer 05)

擴展:動態分配版本

char *replace_spaces(const char *s) {
    int len = strlen(s), count = 0;
    for (int i=0;i
							
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved