QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
#
发表于 2005-1-26 19:31 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<>c++ builder:如何转换全角字符到半角字符?</P>' T* `! Q: @3 O/ g  I! N+ v
<>  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字' |3 S( b4 D' P0 O
节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则5 f! l. g2 l! h/ K; R  N' N) ~
是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163
# r1 D8 k8 ?* p3 l' t" v1 |,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。
+ P/ ?: S+ i$ W- g, ^; j7 v' ?0 X  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面
* U/ B$ ?0 G  ^1 D我给出一个例程供大家参考。</P>/ ?$ b# c3 d3 {) s0 E
<>
: \( C9 U* F) E. N  新建窗体,在窗体上放置Button1、Edit1、Edit2。</P>3 D7 K- M6 D7 \( f; t# s
<>/*在Edit1中输入全角字符、中文、半角字符或混杂输入。
! u. b  t: O& L6 l: L: w单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。
2 e+ w2 ?( X5 w. _' B注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/
( }3 ^: L( U5 z/ e/ jvoid __fastcall TForm1::Button1Click(TObject *Sender)9 \0 J% l9 P; c  e( D: O
{
( g" y8 }+ d& a2 u        int nLength=Edit1-&gt;Text.Length();
  N4 S6 u3 n& Z# u1 y        if (nLength==0)
0 y8 k. T; t7 `% M( E+ C                return;
8 T6 N+ |& U& N9 g% S        AnsiString str="";
- `  ?5 c# D2 C# p: k        char *cTmp=new char[nLength+1];
* t5 s/ [1 q$ v" j4 a+ }        StrPCopy(cTmp,Edit1-&gt;Text);
; p7 l' ~  Z$ @$ j3 q        BYTE c1,c2;
7 ^# y# C4 s5 ]- `3 G1 J4 O        int i;
* S9 H. o3 f& C: A* `* ]        for (i=0;i&lt;nLength;i++). X9 a0 c. O0 l' V" y
        {$ R$ i. U  t  j/ v" v! m1 e, u
                c1=cTmp;
) N+ v5 G. \! `2 F6 Y2 g                c2=cTmp[i+1];
6 d( Y& E7 x5 R" ]8 o( V                if (c1==163)//判断是否为全角字符& I2 h# t3 o3 r
                {</P>
& f! ?3 P3 X- T<>                        str=str+AnsiString((char)(c2-128));7 L) [' t7 D0 h2 @$ P; S: r% i
                        i++;% G5 E4 X5 s2 i. v. g. u- z
                        continue;
5 f- }" [: \9 [) k0 I                 }! v2 S) a- [7 i0 t6 H9 E/ R( k
                if (c1&gt;163)//判断是否为文字
; B& t" T2 X& m$ d. |! P0 {                {</P>
: T- d4 P5 J# n) e) t1 O; c/ g! a<>                        str=str+AnsiString((char)c1);
$ O. i& ~. U7 Z+ X9 b. ]) h                        str=str+AnsiString((char)c2);
* |, e- _! `8 |- V/ B; V, d                        i++;2 U" x* o, r% n" o' l# z" s0 E
                        continue;% @6 x( I' s0 u  p" c
                }+ [& w$ f( {* E0 n6 |( ^$ t
                if ((c1==161) &amp;&amp; (c2==161))//全角空格是个特例,另加处理) ~4 T& o3 e6 z: ?
                        {( K( `( _9 [% o' [
                                str=str+" ";: q& H( S0 Z# L  m4 z' L
                                i++;/ N' Z" U  t; Q, X
                                continue;
, y& a4 g6 w0 j4 s                        }
5 i$ ~7 Z' f5 J4 I% ^+ y                str=str+ AnsiString(char(c1));
$ C% {2 t4 a5 t! n+ f' E* X        }: z8 D* y7 y0 d8 t# O, j: M
        Edit2-&gt;Text=str;
: L* L: a) v: s; \& F/ M/ I6 C        delete cTmp;cTmp=NULL;+ ^' D9 B3 ?% l; ?1 R4 x: P
} </P>. \5 C7 H, w$ a& `: p( _/ D0 P
<>  以上代码C++Builder5.0/Win98 SE下编译通过。                        ! D6 V6 y; R& S
</P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持1 反对反对0 微信微信

4

主题

3

听众

656

积分

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

    [LV.5]常住居民I

    群组数学建模培训课堂1

    群组数学建模培训课堂2

    群组2011年第一期数学建模

    群组科技写作基础培训

    回复

    使用道具 举报

    毛冲届        
    头像被屏蔽

    0

    主题

    4

    听众

    20

    积分

    该用户从未签到

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

    使用道具 举报

    bllr.net        

    0

    主题

    0

    听众

    8

    积分

    升级  3.16%

    该用户从未签到

    自我介绍
    QQ个性签名
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-20 15:30 , Processed in 0.437865 second(s), 74 queries .

    回顶部