c++ builder:如何转换全角字符到半角字符?

 

  我们知道,在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下编译通过。                        

                        csdn_light(稻草人)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值