在 Visual C++ 開發中,經常需要處理混合語言文本。例如從用戶輸入、文件讀取或網絡數據中提取純中文內容,去除英文字母、數字及標點符號。這是一個經典的字符編碼與字符串處理問題。
利用字符編碼特性:中文字符在 GBK/GB2312 編碼中佔用兩個字節,其字節值通常大於 127(即 0x80)。而 ASCII 字符(英文、數字、標點)佔用單字節,值範圍 0~127。通過判斷字符字節值是否超出 ASCII 範圍,即可實現過濾。
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "中文123,英文abc...";
string result = "";
const char* c = s.c_str();
for (int i = 0; i < s.length(); i++) {
// 將 char 轉為 unsigned char 避免負值干擾
unsigned char ch = c[i];
// 中文字符高位字節通常 > 0x80
if (ch > 127) {
result += c[i];
}
}
cout << "過濾後: " << result << endl;
return 0;
}
若需保留數字或特定標點,可調整條件:
// 保留中文、數字、中文標點
if (ch > 127 || isdigit(ch) || ch == '。' || ch == ',') ...
掌握字符編碼底層特性,能編寫出高效、輕量的文本處理代碼。實際項目中建議根據項目編碼統一選擇處理策略,必要時引入 ICU 等專業庫保證跨平台兼容性。