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

三道經典 C 語言字串操作筆試題詳解

     編輯:關於C語言

題目一:字母數字分離重排(保持相對順序)

需求:將字串重新排列,字母前置、數字後置,且不改變字母間、數字間的原始相對順序。

核心思路

  1. 掃描原字串,分別將字母、數字存入兩個暫存陣列
  2. 利用 strcat 將字母陣列與數字陣列拼接
  3. 透過額外參數 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)。

解題關鍵

  • 先將 t1 複製到臨時陣列 t1temp 便於比較
  • 正向掃描 s,每次截取長度 T 的子串與 t1 比較,記錄最後匹配位置 k
  • 根據 k 重構新字串:k 之前保持原樣,k 位置放入 t2,其後接原字串剩餘部分

改進建議

原解法固定子串長度 T=2,實際應用中建議改用 strlen 動態獲取長度,增強通用性。

題目三:刪除 ASCII 碼為奇數的字符

需求:移除字串中 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 判斷 + 緊湊複製局部陣列指標返回風險
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved