QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 19:31 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>c++ builder:如何转换全角字符到半角字符?</P>7 g$ @8 J% r3 C, E* i: g
<>  我们知道,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。我们可以凭这一点来一个个检测用户输入的是否是中文和全角字符。实际上,全角字符的第一个字) ]9 Q$ m: a- u
节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则3 J2 e* e. w7 [2 G' m
是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163
' H' ^; R) r( S7 @- G,(如'阿'为:176 162),我们可以在检测到中文时不进行转换。
# j4 v( t, O* [% c% G0 \3 c# O  以上仅为我个人试验所得,而我更是学习编程不到半月。如果有错误或失漏,请大家不吝赐教。下面
* `, m" n5 y5 C+ f8 H  n我给出一个例程供大家参考。</P>
6 J: f3 G5 a5 e$ L& w<>
( ?# K5 p3 q2 V& p" p8 J8 G  新建窗体,在窗体上放置Button1、Edit1、Edit2。</P>
. c% L2 j; n# p3 `<>/*在Edit1中输入全角字符、中文、半角字符或混杂输入。4 E/ T1 C% _" e, o; ~8 {8 Z8 {
单击Button1,Edit1中的文字显示到Edit2中并转换了所有的全角字符。
% S' }/ ?# `9 f* b6 f* j注意,程序没有对特殊字符如255(按住ALT再按小键盘的2、5、5输入)等作出正确反应。*/$ D: ~* g+ a4 B* s: }* o4 k
void __fastcall TForm1::Button1Click(TObject *Sender)
, {  q9 }5 s) ^8 F) ]4 q{
/ z0 ]5 v) I( o5 |; W        int nLength=Edit1-&gt;Text.Length();
  l. F" }! U3 {& O' T- V7 u& Q        if (nLength==0)4 O& S$ O4 n  v- j6 A
                return;
6 ]  C+ k, D, m* ~  \) [  [        AnsiString str="";
1 ?  V* k/ W1 v" X4 U) A        char *cTmp=new char[nLength+1];0 i. A5 M0 m- ^
        StrPCopy(cTmp,Edit1-&gt;Text);
1 D) g0 E: P$ i( ^# h        BYTE c1,c2;
1 N* y7 _, ?! k8 m' \9 H/ V        int i;
! v( v( o9 B7 F3 g* X        for (i=0;i&lt;nLength;i++)& s7 x5 }9 o% I% g( b
        {
0 f# @3 \! S% t( \                c1=cTmp;+ l% g3 q, X0 b; F! V/ }7 z- y2 m
                c2=cTmp[i+1];5 u$ M! ?$ G* B+ P) j
                if (c1==163)//判断是否为全角字符
* r) Z# @% t' q. p% A2 q3 u                {</P>  N/ D3 Y4 u, V7 M% {+ L. q) c: I
<>                        str=str+AnsiString((char)(c2-128));
; d* k: \& u7 G+ x9 S  n4 y                        i++;
3 E* ~. ^) W8 l9 s/ Z                        continue;. L! B4 p; w3 J! O8 U  @. X
                 }6 D, ^- I: q, [# @2 V! S% [
                if (c1&gt;163)//判断是否为文字
; W' t7 v) o* g& F! @  [" K5 q                {</P>
4 ^7 X- M' i. \7 w5 g<>                        str=str+AnsiString((char)c1);
/ C. b8 o$ S, I                        str=str+AnsiString((char)c2);4 K1 }( S  t# w  @' Z
                        i++;2 S& s! k" n; t7 l* E  T
                        continue;
& S; W2 z5 x/ ~6 T& a0 a/ }. m                }8 c8 w: C3 `8 x1 }4 ~2 h5 c
                if ((c1==161) &amp;&amp; (c2==161))//全角空格是个特例,另加处理5 w( X) s, a; q! W
                        {
; L1 x) k- G* K                                str=str+" ";
6 N. _! T2 L( D% g6 y0 V; c' W                                i++;! i5 @. |0 i- ^9 m% Y
                                continue;
. ~6 o" F# A; v; h; n8 v2 |& p) b                        }
+ D* a9 Z# h% b* T" @                str=str+ AnsiString(char(c1));1 j( W" l. Z7 z* x1 I
        }4 z5 X3 k/ Y$ N) Y# j4 t
        Edit2-&gt;Text=str;- n) ~# \7 }2 @: p' Q5 F% I
        delete cTmp;cTmp=NULL;2 r3 n  I. `  B% n8 p" @( B) F
} </P>
5 B. n5 K" ]# w0 H% C' G. T<>  以上代码C++Builder5.0/Win98 SE下编译通过。                        
$ c+ c8 K6 [; m/ S/ L</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-12-1 22:46 , Processed in 0.534982 second(s), 72 queries .

    回顶部