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

C 語言經典字串處理 18 題:從壓縮、解析到排序的完整實戰

     編輯:關於C

題目清單總覽

#主題核心技巧
1字元順序歸類壓縮巢狀迴圈 + 標記法
2IP 位址合法性驗證strtok 分割 + 範圍檢查
3連續字元計數壓縮單次掃描 + 計數器
4字串解壓縮數字解析 + 字元重複輸出
5最長連續子串查找掃描計數 + 最大值追蹤
6兩字串最長公共子串雙重迴圈 + 狀態旗標
7單詞字典序排序strtok 分割 + qsort/冒泡
8單詞計數strtok 分割計數
9命名風格轉換 (蛇形↔駝峰)字元逐個處理 + 大小寫轉換
10字串刪除指定區間陣列元素前移覆蓋
11字串插入指定位置陣列元素後移騰空
12字串替換指定區間刪除 + 插入組合
13子串抽取與插入子串複製 + 目標插入
14指標陣列字串交換指標交換而非資料移動
15字串陣列查找索引strtok + strcmp
16字串連接 (分隔符插入)迴圈輸出 + 分隔符處理
17字串分割 (多字元分隔符)手動比對分隔符 + 截斷
18字母頻率統計標記法 + 計數陣列

核心技巧模式總結

1. 字串分割三板斧

// 標準庫 strtok (修改原字串、非執行緒安全)
char *p = strtok(str, "delim");
while (p) { /* process */ p = strtok(NULL, "delim"); }

// 手動分割 (支援多字元分隔符、不修改原字串)
while (str[i]) {
    if (match_separator(&str[i], sep)) {
        str[i] = '\0'; // 截斷
        // 記錄下一段起始位址
    }
    i++;
}

2. 字串修改三基本操作

操作核心邏輯關鍵點
刪除後續元素前移覆蓋邊界檢查、結束符重設
插入後續元素後移騰空緩衝區足夠大、結束符重設
替換刪除舊 + 插入新長度變化處理、分情況討論

3. 字元分類與轉換

// 標準庫函數 (ctype.h)
isalpha(c), isdigit(c), islower(c), isupper(c)
tolower(c), toupper(c)

// 手動 ASCII 運算
if (c >= 'a' && c <= 'z') c -= 32; // 小寫轉大寫
if (c >= 'A' && c <= 'Z') c += 32; // 大寫轉小寫

4. 指標陣列 vs 二維陣列

char *ptr_array[10];      // 指標陣列:各指向不同長度字串,交換只需交換指標
char str_array[10][20];   // 二維陣列:固定寬度,交換需逐字元複製

精選題目深度解析

題目 1:字元順序歸類壓縮

輸入: SamSameCome
輸出: SSaammmeeCo / S2a2m3e2C1o1

技巧:外層遍歷原字串,內層尋找相同字元輸出並標記空格,最後二次掃描計數壓縮。

題目 9:命名風格雙向轉換

snake_case → camelCase: long_and_mnemonic_identifier → longAndMnemonicIdentifier
camelCase → snake_case: longAndMnemonicIdentifier → long_and_mnemonic_identifier
錯誤風格檢測: bad_Style → Error! (底線後接大寫)

技巧:單次掃描,遇 _ 刪除並大寫下一字;遇大寫插入 _ 並小寫;檢測 _ 後接大寫報錯。

題目 14:指標陣列交換排序

char *p[10];
p[0] = strtok(str, " ");
for (i=0; p[i]; i++) p[i+1] = strtok(NULL, " ");

// 交換指標而非資料
char *temp = p[n]; p[n] = p[m]; p[m] = temp;

優勢:O(1) 交換、不移動實際字串資料、記憶體效率高。

常見陷阱與避坑指南

  • gets() 不安全:必須用 fgets(buf, size, stdin)
  • strtok 破壞原字串:需備份或用手動分割
  • strtok 非執行緒安全:多執行緒用 strtok_r 或手動實作
  • 緩衝區溢位:插入/替換前必須檢查剩餘空間
  • 多位數字解析:解壓縮時需處理 10、12 等多位數
  • 字串結束符維護:所有修改操作結束必須重設 \0

結語

這 18 道經典字串題涵蓋了 C 語言字串處理的核心技能樹:分割、統計、修改、搜尋、排序、轉換。掌握 strtok、雙指標、狀態機、指標陣列等核心模式,並養成邊界檢查、緩衝區管理、記憶體安全的工程習慣,即能從容應對面試、考試與實務開發中的各類字串處理挑戰。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved