QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 19:31 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>c++ builder:如何转换全角字符到半角字符?</P>
1 u5 j$ f* [  I4 v<>  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字
$ H) w( M% X* \' c节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则! n: n2 f; N2 ?/ F- ]
是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163
! I) a4 m3 A+ Z  Z+ V( T,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。
% P- o$ {6 z" _6 D$ m' ~. V5 w+ O& o1 Q  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面
2 a. x0 @- w! ]% K$ F我给出一个例程供大家参考。</P>
5 g4 Z- N+ @9 ]2 O4 ?: c8 j<>
0 W9 d' n2 r' D/ }  新建窗体,在窗体上放置Button1、Edit1、Edit2。</P>
" [9 f- x) ?4 i4 O$ K/ ^<>/*在Edit1中输入全角字符、中文、半角字符或混杂输入。
# P0 K! Q, e1 t: w3 L单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。7 {$ }0 s8 f6 x
注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/
; v  p! s7 |( h. ?1 {! y5 [/ P: pvoid __fastcall TForm1::Button1Click(TObject *Sender)
' [. g% J, M4 R/ h{. W) g9 v$ [) O
        int nLength=Edit1-&gt;Text.Length();9 B" p5 t+ A$ j! |; `8 d6 x
        if (nLength==0)1 J; B& l) \% e5 c7 K% Y* @
                return;& b, Z+ W0 Q1 [2 q+ I
        AnsiString str="";/ G8 F8 H4 F& k
        char *cTmp=new char[nLength+1];  `& S6 R9 ], J. l' _; _5 E, S' ~
        StrPCopy(cTmp,Edit1-&gt;Text);: s. ^' @- R% Q. w$ q$ h
        BYTE c1,c2;* M2 }( _- H. N8 e3 _, p# V9 r
        int i;
  c5 T% b9 c- M        for (i=0;i&lt;nLength;i++)" Z0 ]/ N' w- a% P0 |1 T! [
        {, v9 d- n  P3 c$ ?, [1 ^
                c1=cTmp;
" }# o9 v. p) b- ~, W7 P2 r% a                c2=cTmp[i+1];0 G* h9 V6 F& S" C5 {8 B% e. s
                if (c1==163)//判断是否为全角字符
& o2 D5 }" b8 }/ P3 |                {</P>! B# U# C( \* Y- N" o: R9 f4 E0 k
<>                        str=str+AnsiString((char)(c2-128));
, U7 k0 _4 B! T# B# U                        i++;
, `+ f$ V3 Q, }/ D# |                        continue;
9 ^' E& X7 `/ `                 }. @! I" d4 A, W5 s3 L. |+ O
                if (c1&gt;163)//判断是否为文字& f) x! ]8 D9 v4 d( Y+ E# H
                {</P>
, r7 h  @9 |0 w& l<>                        str=str+AnsiString((char)c1);
4 p9 C0 b+ g  `9 Z, ]: m                        str=str+AnsiString((char)c2);
8 {" o! x5 f( c2 b3 O                        i++;
  X6 c5 q) h8 x7 N9 {9 G                        continue;
* N# M% H4 V4 z5 f                }
: R7 ^3 y- x" z' H7 v5 }- s                if ((c1==161) &amp;&amp; (c2==161))//全角空格是个特例,另加处理5 `( l( d  q5 ^( v7 d' ?7 y  t7 V3 G. z
                        {1 j  U" [$ v. z& q, f
                                str=str+" ";2 e: i# \! x" m
                                i++;
) y( X4 }) D2 a6 U+ M                                continue;0 `3 ]7 G8 f# w
                        }/ R( |* W/ m2 t$ p1 e0 l8 z/ q
                str=str+ AnsiString(char(c1));. g% q" D4 n8 \
        }
) _- r; S7 X) O7 g3 n' q        Edit2-&gt;Text=str;
# O3 o$ s# G# k' j, _9 {( `        delete cTmp;cTmp=NULL;. B0 J3 c1 a: S9 P
} </P>
. ]' ?' o: Z) C<>  以上代码C++Builder5.0/Win98 SE下编译通过。                        + Q8 S2 s5 w7 c2 c$ M! d% n5 T
</P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持1 反对反对0 微信微信
2#
无效楼层,该帖已经被删除
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年第一期数学建模

    群组科技写作基础培训

    回复

    使用道具 举报

    6#
    无效楼层,该帖已经被删除
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-7-18 07:05 , Processed in 0.428680 second(s), 82 queries .

    回顶部