如何轉換全角字符到半角字符?
2019-09-06 23:33:31
供稿:網友
我們知道,在windows中,中文和全角字符都占兩個字節,并且使用了ascii chart 2 (codes 128?C255)。我們可以憑這一點來一個個檢測用戶輸入的是否是中文和全角字符。實際上,全角字符的第一個字節總是被置為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)
{
/tint nlength=edit1->text.length();
/tif (nlength==0)
/t/treturn;
/tansistring str="";
/tchar *ctmp=new char[nlength+1];
/tstrpcopy(ctmp,edit1->text);
/tbyte c1,c2;
/tint i;
/tfor (i=0;i<nlength;i++)
/t{
/t/tc1=ctmp;
/t/tc2=ctmp[i+1];
/t/tif (c1==163)//判斷是否為全角字符
/t/t{
/t/t/tstr=str+ansistring((char)(c2-128));
/t/t/ti++;
/t/t/tcontinue;
/t/t }
/t/tif (c1>163)//判斷是否為文字
/t/t{
/t/t/tstr=str+ansistring((char)c1);
/t/t/tstr=str+ansistring((char)c2);
/t/t/ti++;
/t/t/tcontinue;
/t/t}
/t/tif ((c1==161) && (c2==161))//全角空格是個特例,另加處理
/t/t/t{
/t/t/t/tstr=str+" ";
/t/t/t/ti++;
/t/t/t/tcontinue;
/t/t/t}
/t/tstr=str+ ansistring(char(c1));
/t}
/tedit2->text=str;
/tdelete ctmp;ctmp=null;
}
以上代碼c++builder5.0/win98 se下編譯通過。