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

Visual C++ 字串分割函數實作:以分隔符拆解鍵值對

     編輯:關於VC++

在 VC++ 開發中,標準庫未提供現成的字串分割功能。本文提供一個基於 CString 與 CStringArray 的輕量級分割函數,支援自訂分隔字元,適用於解析「鍵=值;鍵=值;」格式的設定字串。

函數介面設計

// 參數說明:
// source   - 待分割的源字串
// dest     - 儲存分割結果的字串陣列(輸出參數)
// division - 分隔字元(如 ';'、','、'|' 等)
void decodeCString(CString source, CStringArray& dest, char division);

核心演算法邏輯

  1. 清空目標陣列 dest.RemoveAll()
  2. 遍歷源字串每個字元
  3. 遇到分隔字元時,取左側子串加入陣列
  4. 利用巢狀迴圈移除已處理的前綴,保留剩餘部分供下輪處理

完整實作代碼

void decodeCString(CString source, CStringArray& dest, char division) {
    dest.RemoveAll();
    for (int i = 0; i < source.GetLength(); i++) {
        if (source.GetAt(i) == division) {
            // 取得分隔符左側內容
            dest.Add(source.Left(i));
            // 移除已處理部分,保留右側待續處理
            for (int j = 0; j < (dest.GetSize() - 1); j++) {
                dest[dest.GetSize() - 1] =
                    dest[dest.GetSize() - 1].Right(
                        dest[dest.GetSize() - 1].GetLength() -
                        dest[j].GetLength() - 1);
            }
        }
    }
}

使用範例

CString cfg = _T("姓名=劉德華;年齡=40;國籍=中國;");
CStringArray fields;
decodeCString(cfg, fields, _T(';'));

// fields 內容:
// [0] = "姓名=劉德華"
// [1] = "年齡=40"
// [2] = "國籍=中國"
// [3] = "" (尾部分隔符產生空項,可視需求過濾)

改進建議與現代替代方案

  • 效能優化:現行演算法為 O(n²),長字串建議改用 CString::Tokenize() (VC7.1+) 或手寫單趟掃描
  • 邊界處理:連續分隔符、首尾分隔符會產生空字串,呼叫端需自行過濾
  • 現代 C++:C++17 可用 std::string_view + std::search 實現零拷貝分割
  • Boost 選項:boost::algorithm::split() 提供豐富策略

本函數雖簡單,但在舊版 VC6 專案維護或嵌入式環境無 STL 時,仍具備即拿即用的實用價值。

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