QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 19:31 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>c++ builder:如何转换全角字符到半角字符?</P>
" {% Q3 C1 X  r<>  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字
3 R" w, S: x8 s% L/ R节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则+ R* V% S# z' [2 q6 s. [3 W
是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163( \9 _5 v& n9 H' q0 Y) E
,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。
# h' x" L' k) x/ s# a7 c& I  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面
, o3 ^; _2 o$ S8 G2 w8 W5 X/ e4 J我给出一个例程供大家参考。</P>
6 @) \4 d5 `0 l  _, _0 _& }<>
3 O$ _3 U* f8 r7 j4 R  新建窗体,在窗体上放置Button1、Edit1、Edit2。</P>2 W2 l( o; Y5 O- T4 q7 s/ f* D
<>/*在Edit1中输入全角字符、中文、半角字符或混杂输入。7 s5 s: {, b3 o) s
单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。% a- G, l% d: {( Y  E: ^
注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/
* y+ _( A: x+ v7 q& f- Avoid __fastcall TForm1::Button1Click(TObject *Sender)
  @* f6 d, [+ l7 F' {3 X{
/ |  X) S% K0 a; a7 d, m        int nLength=Edit1-&gt;Text.Length();
& @8 A' O$ U% s        if (nLength==0)2 i& b! s. v$ b9 ?9 P- V
                return;% _: J! M# W$ ?4 `6 @( L
        AnsiString str="";$ N) }: Y$ U0 n0 Q! A; e
        char *cTmp=new char[nLength+1];  @! n& b" y: K% U2 P+ G
        StrPCopy(cTmp,Edit1-&gt;Text);
6 T7 u  `+ P& s- `        BYTE c1,c2;2 k: i, m0 N  @% Q5 p
        int i;$ a0 K$ {9 F: r5 X6 j
        for (i=0;i&lt;nLength;i++)% z3 U. w) m0 i! h3 z
        {
' j4 Q" R" g7 T% @                c1=cTmp;
1 P. s% M; `8 K  M                c2=cTmp[i+1];
0 W) _* |# ~: G" f  U, H                if (c1==163)//判断是否为全角字符$ }; ?4 w# e( ?8 m! Z: c: k
                {</P>2 i# a1 @/ T" K' Z% W/ \
<>                        str=str+AnsiString((char)(c2-128));- p" y' ]$ ]6 {5 d* u" D" P
                        i++;
, Z6 n, C: ]7 R                        continue;
2 h) d- A. n2 o- Q                 }
, c& O+ J, a( M9 [2 b                if (c1&gt;163)//判断是否为文字
+ `$ ]; f# U# l# v                {</P>
- R: j3 ]: q5 M: ~6 c0 A- W<>                        str=str+AnsiString((char)c1);
: t& @, W0 E3 o8 L3 \                        str=str+AnsiString((char)c2);
: q* n  V- G( B. @) t, E$ h7 k  n                        i++;
. g. e9 ^  |  U" D4 _$ `7 p                        continue;
- U7 Y" ]  p, C( }: L                }
' V/ w1 R. q/ G: i% z3 E# |                if ((c1==161) &amp;&amp; (c2==161))//全角空格是个特例,另加处理" l( r6 M; A3 x5 q% N" v  M, s
                        {
% i0 i0 u5 N$ X- }4 m2 X# W; w                                str=str+" ";$ R' Y4 ^) g) F* A( \5 [
                                i++;( [5 Z$ f, O; h4 H( a7 H9 e
                                continue;& ^7 T1 D3 J; K" ~6 T
                        }. S1 ~* J, p! X" m* |
                str=str+ AnsiString(char(c1));
/ F8 L4 }3 p, k, ~  `" T* n        }: g4 R7 ~$ t' k4 O
        Edit2-&gt;Text=str;
& Y" b/ e& F/ F# ?  ?" T; x        delete cTmp;cTmp=NULL;
3 W1 K3 X) N  S5 d) T) t+ W% a} </P>/ L& r1 Z8 Z5 E* Y) }
<>  以上代码C++Builder5.0/Win98 SE下编译通过。                        
, X/ ~6 k% N0 g, @: p4 l5 X( h</P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持1 反对反对0 微信微信
2#
无效楼层,该帖已经被删除
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年第一期数学建模

    群组科技写作基础培训

    回复

    使用道具 举报

    6#
    无效楼层,该帖已经被删除
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-5-10 08:35 , Processed in 0.643049 second(s), 81 queries .

    回顶部