程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 如何轉換全角字符到半角字符

如何轉換全角字符到半角字符

編輯:關於C++

我們知道,在windows中,中文和全角字符都占兩個字節,並且使用了ascii chart 2 (codes 128–255)。我們可以憑這一點來一個個檢測用戶輸入的是否是中文和全角字符。實際上,全角字符的第一個字節總是被置為163,而第二個字節則是相同半角字符碼加上128(不包括空格)。如半角a為65,則全角a則是163(第一個字節)、193(第二個字節,128+65)。而對於中文來講,它的第一個字節被置為大於163,(如'阿'為:176 162),我們可以在檢測到中文時不進行轉換。

以上僅為我個人試驗所得,而我更是學習編程不到半月。如果有錯誤或失漏,請大家不吝賜教。下面我給出一個例程供大家參考。

新建窗體,在窗體上放置button1、edit1、edit2。

/*在edit1中輸入全角字符、中文、半角字符或混雜輸入。單擊button1,edit1中的文字顯示到edit2中並轉換了所有的全角字符。注意,程序沒有對特殊字符如255(按住alt再按小鍵盤的2、5、5輸入)等作出正確反應。*/

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;
 int i;
 for (i=0;i<nlength;i++)
 {
  c1=ctmp[i];
  c2=ctmp[i+1];
  if (c1==163)//判斷是否為全角字符
  {
   str=str+ansistring((char)(c2-128));
   i++;
   continue;
  }
  if (c1>163)//判斷是否為文字
  {
   str=str+ansistring((char)c1);
   str=str+ansistring((char)c2);
   i++;
   continue;
  }
  if ((c1==161) && (c2==161))//全角空格是個特例,另加處理
   {
    str=str+" ";
    i++;
    continue;
   }
  str=str+ ansistring(char(c1));
 }
 edit2->text=str;
 delete ctmp;ctmp=null;
}

以上代碼c++builder5.0/win98 se下編譯通過。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved