c++ builder:如何转换全角字符到半角字符?
来源:互联网 发布:粉笔上的数据如何重置 编辑:程序博客网 时间:2024/06/05 09:33
我们知道,在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;
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(稻草人)
- c++ builder:如何转换全角字符到半角字符?
- c++ builder:如何转换全角字符到半角字符?
- [C#]把半角字符转换为全角
- C语言实现半角、全角字符转换
- C语言 字符全角、半角转换
- 全角、半角字符相互转换
- 全角、半角字符相互转换
- 全角字符转换为半角
- 半角全角字符转换函数
- 全角和半角字符转换
- java 半角全角字符转换
- 全角半角字符相互转换
- 全角字符转换成半角字符
- 半角字符向全角字符转换
- JAVA全角字符转换为半角字符
- 全角字符 半角字符
- 全角字符转换为半角,判断半角和全角
- java全角字符转换为半角 半角转全角
- CentOS上搭建Nginx + Mono 运行 asp.net
- careercup2.4
- 【算法】组合数学——排列数生成算法详解(一)
- winpdb调试python3
- oracle 基本函数
- c++ builder:如何转换全角字符到半角字符?
- 第十二周实验指导--任务1--理解基类中成员的访问限定符和派生类的继承方式
- Ansistring使用方法大全 2
- 配置mongodb分片群集问题
- 悲惨之windows8 MediaPlayer
- android翻书效果实现原理( 贝塞尔曲线绘制原理/点坐标计算)
- Redhat/CentOS系统中YUM常用命令介绍
- amazon的一个大牛谈各种语言
- Ansistring使用方法大全 1