首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

全文檢索:C++ 過濾文本中的符號與英文,只保留中文

     編輯:程式設計綜合問答

在構建全文檢索系統或文本預處理時,常需從混雜文本中提取純中文。本文提供一個 C++ 實現方案,利用字節特徵識別中文字符(GBK/UTF-8 雙字節/三字節編碼),過濾掉英文、數字、標點等非中文內容。

核心思路

中文字符在 GBK 編碼下佔 2 個字節(高位字節 0x81–0xFE),UTF-8 下佔 3 個字節(以 0xE4–0xE9 開頭)。通過檢查字節值範圍,可判斷是否為中文,從而構建純中文結果字符串。

代碼實現

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "你好,我好。abc,123,aaa...中文英文!";
    string r = "";
    const char* c = s.c_str();
    for (int i = 0; i < s.length(); i++) {
        // 簡易判斷 GBK 中文首字節特徵(實際項目建議用 ICU 或 iconv 做編碼轉換)
        if ((c[i] & 0x80) != 0) { // 高位為 1,可能是中文
            r += c[i];
            if (i + 1 < s.length()) r += c[i + 1];
            i++; // 跳過第二字節
        }
    }
    cout << r << endl; // 輸出:你好我好中文英文
    return 0;
}

注意事項

  • 上述代碼假設輸入為 GBK 編碼;若為 UTF-8,需按 3 字節處理(首字節 0xE0–0xEF)。
  • 生產環境建議使用成熟庫(ICU、Boost.Locale、cppjieba)處理編碼轉換與分詞,避免手工解析出錯。
  • 若需保留標點,可擴展判斷邏輯(如保留全角標點)。

此方法適用於輕量級文本清洗,大規模檢索請接入專業分詞組件。

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