QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 19:31 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>c++ builder:如何转换全角字符到半角字符?</P>
/ L0 O9 Y7 c. [<>  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字' f/ y+ t1 o4 q+ s
节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则3 Y' y: Q' a- s) J/ g/ X
是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163
+ W. c* l+ i% J6 ^: [,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。
& m2 m% \% U& U, X  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面
- S4 A& O4 q8 R# e* O我给出一个例程供大家参考。</P>* c  N2 C9 f7 u
<>( u6 ~& r2 ^9 s0 g' C
  新建窗体,在窗体上放置Button1、Edit1、Edit2。</P>
+ P2 i0 O- x+ _/ d$ [<>/*在Edit1中输入全角字符、中文、半角字符或混杂输入。
4 x5 r( Y7 k; r4 n, Z* J% \单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。* O, l6 |% A5 ~8 z2 V. N* C+ @
注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/5 H( m' }2 w9 U8 o( q
void __fastcall TForm1::Button1Click(TObject *Sender): A$ n* c6 @: r. q) h! z0 Z
{9 W2 t% T# D& i* t5 m, J1 {
        int nLength=Edit1-&gt;Text.Length();" q5 k7 O7 P9 d9 o+ G
        if (nLength==0)
% q  G0 F# w7 N. o3 p                return;
8 U1 M  V& I+ L, ?8 N, ~% s% r        AnsiString str="";8 l! ]$ h' f3 c# k$ y, x/ U+ W
        char *cTmp=new char[nLength+1];1 R" i7 I+ v5 L7 _2 N: j* i) k; h
        StrPCopy(cTmp,Edit1-&gt;Text);6 `! i- Y. H  ]4 B2 o1 G
        BYTE c1,c2;
3 h( ~- y9 ]) ]! X0 {        int i;/ r) {4 h! e8 t, R" `. u. w
        for (i=0;i&lt;nLength;i++)5 x, i+ I  f( J& b% v  r
        {
6 Z9 y  s2 T, M3 a2 H                c1=cTmp;
% ^- T  a( m' a" a+ _; `* J, M, b                c2=cTmp[i+1];" A+ M' Z$ F5 C" P3 Z5 E
                if (c1==163)//判断是否为全角字符( `. g  }- A/ ~' d6 e7 Y' u% g  N
                {</P>2 F* s' S" l9 P
<>                        str=str+AnsiString((char)(c2-128));1 ?+ E5 B, |  P( n/ x& G
                        i++;: z) V# x5 s! P# A* d0 o5 @0 O
                        continue;
2 O8 ?  }' S, B. R; \# `' R+ g                 }; n* a/ Y& D9 G2 t" i) H
                if (c1&gt;163)//判断是否为文字
  I: |3 F9 R! u$ {+ d                {</P>
) }, E; C1 J! v& l<>                        str=str+AnsiString((char)c1);
( Y  f# |; ?1 n: A  K+ F                        str=str+AnsiString((char)c2);
/ m- H& v9 m3 h                        i++;
- u  Q' p4 t/ e- J8 U                        continue;, `$ z' c- N& P8 z
                }* l6 y9 n& U+ _, y3 \) Y. f% G
                if ((c1==161) &amp;&amp; (c2==161))//全角空格是个特例,另加处理  p3 W* T' O. l1 v) [/ t
                        {
5 ?7 A) B+ g" i7 f7 h: K                                str=str+" ";* ]% ?5 n1 y# c, ~3 @- A
                                i++;) }, z& a* U% o1 J5 E4 q, R) N
                                continue;
# k2 |  F! j" N& E" V/ V' }                        }
' H# c3 a6 x1 }+ T* T7 ^0 e                str=str+ AnsiString(char(c1));
# V1 M& N; A6 D0 s% u) R2 Y" s        }( G% M- H+ U. g! ?2 v" r, `
        Edit2-&gt;Text=str;: [9 L4 k  D5 P) E1 G
        delete cTmp;cTmp=NULL;
4 r& V$ s5 ?( l1 q( [4 ]0 B/ G; w' H} </P>6 |" @$ _2 O. ]+ T4 N3 |" |/ W2 h
<>  以上代码C++Builder5.0/Win98 SE下编译通过。                        2 r, j7 k# F# e4 i7 S
</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-5-26 04:25 , Processed in 0.425890 second(s), 71 queries .

    回顶部