QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 19:31 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>c++ builder:如何转换全角字符到半角字符?</P>, P6 u$ M* l( o9 ~3 _  B
<>  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字$ i3 p, e* G6 ]& B' F% N! s
节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则
# `* l# V* d/ i是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163
- F3 O- |1 w" W3 Q$ K3 x' \) x. \& Z,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。
* J& P' I: c$ A, M* _  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面* `! s; J- k9 w( w$ F1 R
我给出一个例程供大家参考。</P>
/ ^$ L5 D9 z3 l" X6 x; T5 @) X<>* z3 e- G; }/ `' G5 s+ G
  新建窗体,在窗体上放置Button1、Edit1、Edit2。</P>
! H7 r6 X# p  p, r4 |1 c<>/*在Edit1中输入全角字符、中文、半角字符或混杂输入。
) `! T) x4 q% ]; W单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。7 ], ?! t* i9 ]( m" @6 r
注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/
1 u. M: o/ ?0 }8 Yvoid __fastcall TForm1::Button1Click(TObject *Sender)" i4 ~! S  |8 ]0 l% i. P5 o
{; Z* i3 V( n- I3 J) T1 w4 Z
        int nLength=Edit1-&gt;Text.Length();6 [! C+ ^, E# Q' U, r
        if (nLength==0)  Y% h5 {: N6 w, p8 a: R
                return;1 D: W+ u9 l4 C  B& C5 h
        AnsiString str="";
; x* Z7 o2 I- a: Q( x: K1 r        char *cTmp=new char[nLength+1];& E' B5 {* N, u/ B( A
        StrPCopy(cTmp,Edit1-&gt;Text);
% h8 U& z+ ]+ B( j, M        BYTE c1,c2;1 a2 U+ X, G9 ~( Y
        int i;
9 O" u$ o! W3 e' S        for (i=0;i&lt;nLength;i++)
: R& f% T0 S0 ^4 |3 [5 }        {2 N/ e  D$ _$ Z( Q9 v, X
                c1=cTmp;, i5 U" ~: ~, Z; p/ \8 R
                c2=cTmp[i+1];
( P: r5 I  o5 p- {% G                if (c1==163)//判断是否为全角字符' m4 E- {% e1 s/ i" q9 }% U
                {</P>
( A. \/ Z( ~- ~" F' K<>                        str=str+AnsiString((char)(c2-128));" A) P( m' e% q9 V3 z- U
                        i++;
& X: _5 J8 I* F                        continue;
& c# O! }3 s* p7 X: e                 }2 {3 Q; y! v8 g9 f- l
                if (c1&gt;163)//判断是否为文字% S8 Z0 o9 _0 b& B! o9 T$ r: Z
                {</P>
2 G. L: H1 N6 q6 }, q* ?& r<>                        str=str+AnsiString((char)c1);- m3 ]  ]. L" v# Q
                        str=str+AnsiString((char)c2);2 }4 D+ j$ e9 y! i* N" T
                        i++;$ F. g. S& m' V( C
                        continue;1 D4 B3 P( G; `7 h% u5 j5 A' h7 O" X
                }
/ i2 _. M' u# r9 ^                if ((c1==161) &amp;&amp; (c2==161))//全角空格是个特例,另加处理1 l' R0 V+ I; k3 D% Y+ v
                        {
; N2 A/ ?% E" A) @% ?3 b0 @( ]                                str=str+" ";
# E" ?" s3 o* j) g) I# b0 m                                i++;( g" p( @. {* w( R0 i
                                continue;/ q9 k/ o- e3 ]( O8 p4 f
                        }! c1 m% q7 g/ G- v7 o
                str=str+ AnsiString(char(c1));: x9 ~( u4 v* x+ H( ?
        }; R! q3 D1 [1 M- E! N: E
        Edit2-&gt;Text=str;0 a2 }" V# ]" ~" U
        delete cTmp;cTmp=NULL;4 v( k0 y8 w9 n1 A, k
} </P>3 n  L7 b% W' F& `" P- b
<>  以上代码C++Builder5.0/Win98 SE下编译通过。                        * c4 \4 [9 \+ N; ~/ c
</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-7-18 17:04 , Processed in 0.546761 second(s), 71 queries .

    回顶部