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

全形/半形字元轉換演算法與 C++Builder 實作

     編輯:關於C++

Windows 中中文與全形字元佔兩個位元組,全形字元第一位元組固定為 163(十進位),第二位元組為對應半形 ASCII 碼 + 128(空白除外)。中文字首位元組 > 163。本文提供依據此特性的全轉半演算法與 C++Builder 範例程式。

編碼規律

  • 半形 'A' (65) → 全形 163, 193 (163, 65+128)
  • 全形空白:161, 161(特例)
  • 中文:首位元組 > 163(如 '阿' = 176, 162)

轉換邏輯

  1. 讀取第一位元組 c1:
    • c1 == 163 → 全形字元,取第二位元組 c2 - 128 為半形字元,索引 +2。
    • c1 > 163 → 中文字,保留雙位元組,索引 +2。
    • c1 == 161 && c2 == 161 → 全形空白,轉為半形空白 ' ',索引 +2。
    • 其他 → 半形字元,直接複製,索引 +1。

C++Builder 範例程式


void __fastcall TForm1::Button1Click(TObject *Sender) {
    int nLength = Edit1->Text.Length();
    if (nLength == 0) return;
    AnsiString str = "";
    char* cTmp = new char[nLength + 1];
    StrPCopy(cTmp, Edit1->Text);
    byte c1, c2;
    for (int i = 0; i < nLength; i++) {
        c1 = cTmp[i]; c2 = cTmp[i+1];
        if (c1 == 163) { str += AnsiString(char(c2 - 128)); i++; continue; }
        if (c1 > 163) { str += AnsiString(char(c1)) + AnsiString(char(c2)); i++; continue; }
        if (c1 == 161 && c2 == 161) { str += " "; i++; continue; }
        str += AnsiString(char(c1));
    }
    Edit2->Text = str;
    delete[] cTmp;
}

測試環境:C++Builder 5.0 / Windows 98 SE。注意:特殊字元(如 Alt+255)未處理。

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