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

C++ 正則表達式分割字符串:逗號/空白分隔符完整示例

     編輯:C++ 入門

標準庫 <regex> 方案

C++11 引入 std::regex,配合 std::sregex_token_iterator 可輕鬆實現分割,且自動處理連續分隔符、邊界情況。

完整代碼

#include 
#include 
#include 
#include 
using namespace std;

vector splitString(const string& str) {
    regex pattern(R"([\s,]+)");  // 正則:一個或多個空白或逗號
    sregex_token_iterator it(str.begin(), str.end(), pattern, -1);
    sregex_token_iterator end;
    vector tokens;
    for (; it != end; ++it) {
        if (!it->str().empty())  // 可選:過濾空串
            tokens.push_back(it->str());
    }
    return tokens;
}

int main() {
    string input = "apple, banana,  cherry ,date";
    auto parts = splitString(input);
    for (const auto& s : parts) cout << '[' << s << ']';
    // 輸出:[apple][banana][cherry][date]
    return 0;
}

關鍵參數解析

  • pattern:[\s,]+ 匹配任意空白字符(空格、制表、換行)或逗號,**+ 表示一個或多個**,自動合併連續分隔符
  • sregex_token_iterator 構造函數第 4 參數 -1 表示**返回非匹配部分**(即分割出的 token),默認 0 返回匹配部分
  • 迭代器自動處理字符串邊界,無需手動檢查

對比其他分割方法

方法優點缺點適用場景
stringstream + getline標準、簡單單字符分隔符、需手動處理連續分隔符簡單 CSV、單分隔符
strtok / strtok_rC 風格、零分配破壞原串、非線程安全、單字符分隔符C 代碼、極致性能
手寫循環 find/substr完全可控、無依賴代碼冗長、易出錯特殊邏輯、嵌入式無 STL
regex + token_iterator正則強大、自動合併分隔符、代碼極簡編譯正則有開銷、極高頻調用性能稍弱通用分割、多字符/正則分隔符

性能提示

  • 若在熱路徑高頻調用,將 regex pattern 靜態化或傳入預編譯對象
  • 簡單單字符分隔符(如僅逗號)用 string_view + 手寫循環更快
  • C++17 std::string_view 可避免分割時的內存拷貝
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved