QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 13694|回复: 3
打印 上一主题 下一主题

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

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 19:31 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>c++ builder:如何转换全角字符到半角字符?</P>
) L4 _* `- |. T) R<>  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字
  C$ F- ?9 L! c9 }+ L节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则
, I8 q6 c; d& U! b0 {* n! m是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163* y, E3 h9 h4 G  T
,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。
, }9 d4 G$ x: A6 A0 R  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面! i' G) a! v& b
我给出一个例程供大家参考。</P>
: K& S8 U! F4 g3 Q/ Y8 n<>/ m8 U& g3 o3 b' @
  新建窗体,在窗体上放置Button1、Edit1、Edit2。</P>. O/ B1 d6 T3 l) Y" s
<>/*在Edit1中输入全角字符、中文、半角字符或混杂输入。
9 j  y: w9 {6 T. V9 j5 {0 M. m单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。
6 \# u/ s1 ]3 l7 M注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/
4 J( b3 \- Y8 ]8 a& U1 i3 `- X+ Qvoid __fastcall TForm1::Button1Click(TObject *Sender)3 P2 {+ r1 k- E9 J) l8 |
{
) P. Q; b, x0 `$ D; i2 t        int nLength=Edit1-&gt;Text.Length();8 `' F7 J  [) ?; ^2 z' `: r
        if (nLength==0)
9 }7 q" K. E0 x6 T: V; L                return;* P5 a) T5 i" H4 e" `: S) X$ `
        AnsiString str="";
; x/ G: t4 [2 N# q, o% I& F        char *cTmp=new char[nLength+1];0 H' ?( Y2 Y" M. I# J  C2 t. Z/ |2 M
        StrPCopy(cTmp,Edit1-&gt;Text);
7 R% R  [: z  r8 H5 c7 G        BYTE c1,c2;% S! s& x* J) n9 ?5 y2 Z
        int i;) C7 L9 @: h: a+ q1 C1 p9 A# C
        for (i=0;i&lt;nLength;i++)
7 S) U9 G5 |8 W  o! Z, N        {
) Q1 c* c0 i8 d8 h# E7 K& \                c1=cTmp;2 @" q' c* U9 E; P( ^
                c2=cTmp[i+1];
$ A6 N8 B+ f  L9 W/ H" l                if (c1==163)//判断是否为全角字符5 Q8 m0 v  K5 B* v" v2 F! s
                {</P>
5 s; L9 o7 h/ @0 s# y5 X2 J: H9 O4 V<>                        str=str+AnsiString((char)(c2-128));5 H& W) g: q8 a' T- g2 {
                        i++;
8 W# E- E  I7 M  I* ^4 e                        continue;! |, \% E" z2 B0 |
                 }
" L8 O! `/ |6 J( \' [' }                if (c1&gt;163)//判断是否为文字5 @& \- h  q' u" ~8 h5 D8 K; s
                {</P>
% `4 F6 R3 s5 n$ K  G<>                        str=str+AnsiString((char)c1);
5 u! t/ X" y; G9 D# p                        str=str+AnsiString((char)c2);, c& Y5 m% P* B( P3 M* _- V9 f
                        i++;, k7 z  }# C0 }) d. b, j
                        continue;8 `* Z; S5 P; c! I
                }- a2 v$ ?# o! W' h/ Z! ]7 R
                if ((c1==161) &amp;&amp; (c2==161))//全角空格是个特例,另加处理
' d) A9 z, H6 z1 }                        {
! h4 K1 A# {6 T' g5 d                                str=str+" ";8 u& }# i9 ^( M( u; H) w
                                i++;& O4 g7 J0 C$ s# M
                                continue;
% w, c6 j+ v$ E, t  T  a. }                        }  t- h! \+ \6 \
                str=str+ AnsiString(char(c1));2 o% G. B) P6 ^- w0 t9 w& ]
        }6 q% I3 D$ M6 `) ?( B$ a
        Edit2-&gt;Text=str;1 v8 |  W  Q2 P6 t! p4 Y
        delete cTmp;cTmp=NULL;. L! i2 p( w6 x! d+ a
} </P>
. v; t0 ~+ R+ _+ ?$ n<>  以上代码C++Builder5.0/Win98 SE下编译通过。                        
7 f9 d4 Z! `- @</P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持1 反对反对0 微信微信
bllr.net        

0

主题

0

听众

8

积分

升级  3.16%

该用户从未签到

自我介绍
QQ个性签名
回复

使用道具 举报

毛冲届        
头像被屏蔽

0

主题

4

听众

20

积分

该用户从未签到

提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

4

主题

3

听众

656

积分

  • TA的每日心情
    开心
    2011-11-21 14:38
  • 签到天数: 41 天

    [LV.5]常住居民I

    群组数学建模培训课堂1

    群组数学建模培训课堂2

    群组2011年第一期数学建模

    群组科技写作基础培训

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-9-3 02:23 , Processed in 0.447624 second(s), 72 queries .

    回顶部