QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 19:31 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>c++ builder:如何转换全角字符到半角字符?</P>& h9 ~# x9 n9 C+ t# z  @" F
<>  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字
  r$ A1 c$ s, R! i4 R. s9 x+ L节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则
- l3 l2 ~- G: @: ~* N6 F* k是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于1633 F+ p- a% G+ d
,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。- n: U& h  }! Q9 I
  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面
0 e( @+ N0 L" e+ e3 `( V我给出一个例程供大家参考。</P>
+ s( w5 K, K. s0 m5 Y" t: F* x+ W<>
, ?% O+ C1 T7 |' p1 Q  新建窗体,在窗体上放置Button1、Edit1、Edit2。</P>
4 p! V9 q  Q; f% I3 D2 S9 J$ ^6 M4 o<>/*在Edit1中输入全角字符、中文、半角字符或混杂输入。
5 M6 ^4 }; `8 y' ^* q' l7 Q单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。
! H& c9 P& X' `! p注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/4 n9 R% ]1 Z, }4 N. F9 [+ [
void __fastcall TForm1::Button1Click(TObject *Sender)
+ T* g0 y1 Z% y{
" P- F( f" F+ W4 r( q/ `        int nLength=Edit1-&gt;Text.Length();
  I" Z; Y; ?% O) v$ S        if (nLength==0); ~5 M, x- i4 R# F0 X& m" t9 _! {+ U
                return;
5 `5 T! a1 U( W$ Q  o        AnsiString str="";
% p7 k/ C7 P. f0 R9 l& ]        char *cTmp=new char[nLength+1];$ d, V7 Z5 o* w
        StrPCopy(cTmp,Edit1-&gt;Text);( C6 Q7 [' _4 k9 z
        BYTE c1,c2;: m7 d7 W& N8 y% ]! W9 z5 S" T
        int i;7 t9 M+ l8 `3 L  w$ }% }2 d
        for (i=0;i&lt;nLength;i++), h# @- M; }; X! E/ {
        {+ j* }" e# L4 G6 C- Y; `' x
                c1=cTmp;
. a1 Y1 h( c7 Y, t, q                c2=cTmp[i+1];
. ~; V* M/ A2 P5 c/ m                if (c1==163)//判断是否为全角字符
$ c% P5 O6 S0 G# o, o9 U1 M                {</P>9 C  ]! O- e, C( Q
<>                        str=str+AnsiString((char)(c2-128));
+ _2 N& O7 J. m1 d+ `/ i                        i++;' d2 }0 U8 E0 W7 P9 j
                        continue;' Q. I/ r# n2 F
                 }! j: u" S4 b3 |: v: i; |
                if (c1&gt;163)//判断是否为文字" o3 ^. s: M! C6 U/ M8 _1 @
                {</P>7 D, S  s8 U. {' T3 q2 |; [3 N
<>                        str=str+AnsiString((char)c1);
6 G3 R; {6 R3 M( d5 t                        str=str+AnsiString((char)c2);- G. e3 H, Y% `
                        i++;' Z  [4 J' o4 n
                        continue;# `3 z+ U! @. c6 B1 |; `2 Q. D0 U# u. R
                }( ?) m+ I; `! C
                if ((c1==161) &amp;&amp; (c2==161))//全角空格是个特例,另加处理+ p) @9 l. Z' u5 `& l' x0 c3 B3 ~  _
                        {
" Z; s8 }4 }& Z                                str=str+" ";$ \; j7 Z5 m9 p! O  c+ A! e; f
                                i++;  J9 T1 d  t/ {7 O) c' n( W. ?2 E
                                continue;
8 F+ O) C- M: c9 B" D9 S                        }. Y( P8 u" e5 {8 ^; J
                str=str+ AnsiString(char(c1));( {) n& k' F2 D2 c6 Y- I
        }
+ r- X+ ?7 Y* h8 W7 c        Edit2-&gt;Text=str;
. I$ E6 d1 X) Q( X        delete cTmp;cTmp=NULL;0 }  ^- w- `) C) P* `
} </P>4 r* W; K9 N+ q. p0 ^1 M; o
<>  以上代码C++Builder5.0/Win98 SE下编译通过。                        : }( O- f' o; K; Y2 o8 B8 v
</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-8-6 15:03 , Processed in 0.958800 second(s), 71 queries .

    回顶部