需求:將字串重新排列,字母前置、數字後置,且不改變字母間、數字間的原始相對順序。
strcat 將字母陣列與數字陣列拼接int *m 返回有效長度,避免輸出殘留亂碼char *fun(char *s, int *m) {
char chLetter[N], chNumber[N];
int i, j = 0, k = 0;
for (i = 0; i < N; i++) {
if (isalpha(s[i])) chLetter[j++] = s[i];
else if (isdigit(s[i])) chNumber[k++] = s[i];
}
chLetter[j] = '\0';
chNumber[k] = '\0';
*m = j + k;
strcat(chLetter, chNumber);
return chLetter;
}
需求:將字串 s 中最後一次出現的 t1 子串替換為 t2(本題限定 t1、t2 長度為 2)。
t1temp 便於比較原解法固定子串長度 T=2,實際應用中建議改用 strlen 動態獲取長度,增強通用性。
需求:移除字串中 ASCII 值為奇數的字符,剩餘字符形成新串存入 t。
char *fun(char *s, int *m) {
char temp[N];
int i, j = 0;
for (i = 0; i < N; i++) {
if (s[i] == '\0') break;
if ((s[i] % 2) == 0) // ASCII 碼為偶數才保留
temp[j++] = s[i];
}
temp[j] = '\0';
*m = j;
return temp;
}
s[i] % 2 == 0 而非字符本身數值'\0' 結束掃描,避免處理未初始化記憶體| 題目 | 核心技巧 | 易忽略細節 |
|---|---|---|
| 分離重排 | 雙陣列暫存 + strcat | 需額外參數返回有效長度 |
| 替換最後匹配 | 正向掃描記錄最後位置 | 固定長度限制通用性 |
| 刪除奇數 ASCII | 模 2 判斷 + 緊湊複製 | 局部陣列指標返回風險 |