QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 19:31 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>c++ builder:如何转换全角字符到半角字符?</P>
, N/ M* B6 x. ^<>  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字
8 o; q" }) W* _) f* e节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则
6 _5 l1 D  \- M1 [2 O: L是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163
# m7 T0 E' c7 ?2 x/ A,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。
" l  x  r; T! V  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面
" D( G' j& `5 ~* d. s4 l& y( }我给出一个例程供大家参考。</P>% S$ H3 |0 J; U' x9 V$ F7 `
<>/ Z) C9 R) ~# E5 D% u
  新建窗体,在窗体上放置Button1、Edit1、Edit2。</P>! Y' {9 a. @# _% C  ~
<>/*在Edit1中输入全角字符、中文、半角字符或混杂输入。/ U4 h6 e: h1 x9 e  g+ K% S
单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。
- \, o) Y% j) O# e; n注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/
/ B: \% Y% g$ D/ g4 H/ e7 q. Ivoid __fastcall TForm1::Button1Click(TObject *Sender)7 ]+ q2 E4 I7 v- O  e. j
{
8 c; N7 H# g+ K; C3 D( n        int nLength=Edit1-&gt;Text.Length();
- w3 Z  G8 O+ x2 b2 K        if (nLength==0)7 ]( X" V; K5 Q' }! b6 |' R8 e' t
                return;6 y3 D6 e* w: a& f
        AnsiString str="";
% e" T' w# O/ @7 t( R4 w) Y        char *cTmp=new char[nLength+1];0 O8 ]' Z$ U, r: ~* n( A0 ]! H0 \
        StrPCopy(cTmp,Edit1-&gt;Text);
% f5 ]1 R4 |$ Z" m# I( W        BYTE c1,c2;7 u  f& k( ^  w/ M
        int i;
* {7 Z! U; i0 n  g" v        for (i=0;i&lt;nLength;i++)' I' x8 b7 d+ D- p6 K$ _0 F6 s
        {
3 h( X; g6 ^6 U: Q8 r                c1=cTmp;
2 x" B" p0 v! M) L                c2=cTmp[i+1];
3 X- f. l9 \: o6 p  q# I9 u" a                if (c1==163)//判断是否为全角字符
$ d4 S) x" ~! U                {</P>
, ^& n1 ~" U( }: K4 N<>                        str=str+AnsiString((char)(c2-128));
% S$ [" U: N, \3 a8 M2 c                        i++;; o0 |6 m9 z) k3 _2 u1 P
                        continue;
. z3 _% e1 Y  [+ F/ j) C                 }
& G" t5 e8 m% m& U                if (c1&gt;163)//判断是否为文字
2 y% q0 I: g( P  J                {</P>$ q' f* r% g  u0 ?9 W% ^; Z
<>                        str=str+AnsiString((char)c1);
0 {" W$ n7 G/ J8 n                        str=str+AnsiString((char)c2);
7 e: P: w8 ?5 z$ w1 |7 J9 W                        i++;( U! X. d7 U  l3 b( N! G/ K9 w
                        continue;: ~! h3 Z6 G& a3 K# P
                }
1 j. ^# W( w9 C/ b( v                if ((c1==161) &amp;&amp; (c2==161))//全角空格是个特例,另加处理9 @& f3 P1 W' s
                        {
3 j# w9 M* {+ f2 J( o" }2 B' z                                str=str+" ";
) o5 I# o' r( R/ F$ p! q$ X$ R                                i++;+ }7 o+ ~* q' g. p
                                continue;' ]  S, g* Z( a1 b2 u% y6 R% u
                        }6 g) Y0 `) N. x0 I8 l, P
                str=str+ AnsiString(char(c1));
0 {# h, d* z' R0 {        }
# L! B/ d/ ^; I9 t        Edit2-&gt;Text=str;/ g5 Y6 J+ \2 }# c) A
        delete cTmp;cTmp=NULL;
+ L4 P; s. {  C& U} </P>
- _. M# Y% O) E) A, Y6 d" w2 \<>  以上代码C++Builder5.0/Win98 SE下编译通过。                        
$ ^% ^  ]! {- }5 i0 A3 ^- p</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, 2025-6-26 02:42 , Processed in 0.568668 second(s), 71 queries .

    回顶部