將字串中每個空格 `' '` 替換為 `"%20"`。假設字串緩衝區足夠大(或已預留空間)。
#includevoid replace_spaces(char *s, int buffer_size) { int old_len = strlen(s); int space_count = 0; for (int i = 0; i < old_len; i++) if (s[i] == ' ') space_count++; int new_len = old_len + 2 * space_count; if (new_len >= buffer_size) return; // 緩衝區不足(或擴容) int i = old_len - 1; int j = new_len - 1; while (i >= 0) { if (s[i] != ' ') { s[j--] = s[i--]; } else { s[j--] = '0'; s[j--] = '2'; s[j--] = '%'; i--; } } s[new_len] = '\0'; } int main() { char str[100] = "we are happy."; replace_spaces(str, sizeof(str)); printf("%s\n", str); // we%20are%20happy. return 0; }
若無原地限制:`snprintf` 寫入新緩衝區,或動態分配新字串。但面試通常考察**原地雙指標法**。
字串替換空格 = **統計擴展長度 + 雙指標從後往前**。這是「原地修改陣列/字串」通用模式:先算新長度,再反向搬移。同樣適用於「移除元素」、「複製陣列」、「合併兩個有序陣列」等題型。