QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 19:31 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>c++ builder:如何转换全角字符到半角字符?</P>& L' c4 E6 o' K) a* _
<>  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字1 Y% A6 L( m* K
节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则
6 W' A! Y1 p; D2 R* X+ E, c6 [$ [$ Z是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163
9 Q1 j" e; ?! \1 r- a,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。: ^8 S& K9 O6 J% U
  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面; J1 ^- Z" _8 j% a+ G& [! I
我给出一个例程供大家参考。</P># \+ k+ _5 `9 [( _
<>
3 P; C6 F0 _( R9 V0 J, f2 F$ w  新建窗体,在窗体上放置Button1、Edit1、Edit2。</P>- u# A' ]2 r; B$ x) m
<>/*在Edit1中输入全角字符、中文、半角字符或混杂输入。
6 a, b3 A6 N% y# q4 k单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。# m6 h( e4 x- [. U% Y! |: B/ E
注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/$ T3 \* T2 s/ S3 B& W; y, r+ `
void __fastcall TForm1::Button1Click(TObject *Sender)
0 H0 ^' T- O; X{
, y* k1 v3 ?9 ^# Q9 M. c1 b        int nLength=Edit1-&gt;Text.Length();
# H5 a9 U- D& F' T        if (nLength==0)! h+ _, ~0 |1 `) A8 O8 }4 `
                return;
, i: L1 y  \0 S: O$ p, D        AnsiString str="";
' S& I/ B0 O8 g0 P        char *cTmp=new char[nLength+1];  b: h4 B' |: S8 n# U
        StrPCopy(cTmp,Edit1-&gt;Text);$ K& I, ~+ r! S
        BYTE c1,c2;0 i3 |* {" f( c+ |& i3 O; T7 |
        int i;
% f4 l, O8 S- w        for (i=0;i&lt;nLength;i++)
+ L0 F; }- p9 {  `; @2 N" e7 ~- ^        {
) M; p: \+ J2 Q8 P4 X5 z7 [                c1=cTmp;
+ m% ?9 r9 w9 E9 E                c2=cTmp[i+1];, o7 Z4 t& g# ]$ Y7 H9 ?3 Q
                if (c1==163)//判断是否为全角字符; w0 g+ O5 h' P5 o( n9 A; w1 R
                {</P>
( ^8 o% [5 ]& T* s$ s<>                        str=str+AnsiString((char)(c2-128));
1 n# c( U. T: l" e9 E/ U& Y$ D                        i++;
) X( a1 W! q' T" P. i5 O/ _' G- {                        continue;1 W( [" ?# j, W+ h. f. u( v# B
                 }9 G* J# c6 D( a$ c7 V
                if (c1&gt;163)//判断是否为文字" O; B0 D. B8 N
                {</P>
$ y/ ?" M: C; }8 X<>                        str=str+AnsiString((char)c1);
8 v2 p+ }4 S- W) N" D  A                        str=str+AnsiString((char)c2);: ~! C; _/ A3 W6 A% q* I
                        i++;( S9 H6 E( K5 H7 Y" l/ ^, M3 y
                        continue;
5 p% M$ Q; V5 W+ y0 l; L                }
8 u0 H9 y, S  L" w( e$ T                if ((c1==161) &amp;&amp; (c2==161))//全角空格是个特例,另加处理" }0 c- r# {5 J# Y
                        {
# X2 {, J3 O3 P. N& p/ M                                str=str+" ";+ H# m, Z) S/ h4 N7 n% N
                                i++;8 U" v1 R1 ], M( V
                                continue;2 `8 x6 v! k- x+ B- C* }
                        }  m, \9 @+ }7 r
                str=str+ AnsiString(char(c1));7 o2 n. q) ]( u3 E$ B
        }/ c& r- X9 G* X3 t+ P
        Edit2-&gt;Text=str;3 c9 i# g; H% L
        delete cTmp;cTmp=NULL;: }% @) @: `# b0 u: P
} </P>
4 m8 Y7 w% {6 |9 }! X8 s<>  以上代码C++Builder5.0/Win98 SE下编译通过。                        9 B, J8 ]+ b! u& y( `
</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-4-19 10:59 , Processed in 0.478375 second(s), 76 queries .

    回顶部