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

IBM 上海筆試真題:C 語言實現字符串分割 split 函數

     編輯:關於C語言

IBM 上海筆試真題:C 語言實現字符串分割 split 函數

題目:實現 void _c_split(const char* _src, const char* _delimiter, char** _dest),將字符串按分隔符分割,結果存入 _dest 數組(以 NULL 結尾)。

參考實現

void _c_split(const char* _src, const char* _delimiter, char** _dest) {
    assert(_src && _delimiter && _dest);
    int srcLen = strlen(_src), deLen = strlen(_delimiter);
    if (srcLen == 0 || deLen == 0) return;

    char* start = (char*)_src;
    char* end;
    while (1) {
        end = strstr(start, _delimiter);
        if (end) {
            *end = '\0';                    // 覆蓋分隔符為結束符
            *_dest++ = start;               // 記錄子串起始
            end += deLen;                   // 跳過分隔符
            start = end;
        } else {
            *_dest = start;                 // 最後一段
            break;
        }
    }
}

關鍵點分析

  • 原地修改:在 _src 所指內存中將分隔符覆蓋為 \0,避免額外拷貝,**要求 _src 可寫**(不可傳字符串字面量)。
  • 指針數組輸出:_dest 指向指針數組,調用者需預分配足夠大小(如 char *parts[100])。
  • 多字符分隔符:deLen 支持任意長度分隔符。
  • 邊界處理:連續分隔符產生空串;首尾分隔符正常處理。

調用示例

char str[] = "abc$rr$asdsakk$";  // 可修改數組
char *parts[20];
_c_split(str, "$", parts);
for (int i = 0; parts[i]; ++i)
    printf("part[%d]=%s\n", i, parts[i]);
// 輸出:abc, rr, asdsakk, (空串)

改進方向

  • 不修改原串:動態分配拷貝子串,返回 char** 需調用者釋放。
  • 返回分割數量:便於調用者遍歷。
  • 支持正則表達式:需引入 regex.h。

此題考察指針操作、字符串處理、內存所有權與邊界條件,是系統編程基本功的綜合體現。

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