CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何判别CString串中的字符是否是中文字

楼主Programmerjacinth(阿聪)2005-04-04 09:35:05 在 VC/MFC / 基础类 提问

如题。应该是很简单,请各位不要笑话我。我是想区别一个   CString   类型的字符串里的中文汉字和英文字母。 问题点数:50、回复次数:18Top

1 楼steedhorse(晨星)回复于 2005-04-04 09:42:10 得分 15

如果是GBK编码,中文的第一个字节首位为1。  
  如果是Unicode,那么英文的编码还是等于他的Ascii码,只要>128的肯定不是英文。(当然,有可能是日本、韩文、阿拉伯文或者其他的什么文,或者数学符号)。:(  
  一般的情况,这样粗略判断一下就可以了。  
   
  不过,你可以上网查查,不管是GBK,GB2312,还是Unicode,汉字每个字节的编码范围都是可以查到的。Top

2 楼Saimen(沉默是金)回复于 2005-04-04 09:44:26 得分 5

来晚了,  
   
  完全同意楼上的Top

3 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-04-04 09:53:02 得分 1

可以直接从字符地址判断,中文2字节,英文1字节.  
   
  Top

4 楼xqk(夏乾坤)回复于 2005-04-04 10:04:41 得分 6

汉字的组成是2个大于127字节的非标准ASCII码,也就是说两个字节的(8位)第1位都是1  
  如果是英文或符号的话,那么就是标准的ASCII码,也就是说8位的第1位是0  
   
  所以用如下的方法判断  
  CString   str   =   "汉字";  
  for(int   i=0;i<str.GetLength();i++)  
  {  
          char   c   =   str.GetAt(i);  
          if(c   >   127)MessageBox("汉字好像是");  
          else   MessageBox("字符好像是");  
  }  
   
  //但如果在字母之间包函好几个汉字的话,那么要做截取操作,就必须设置标志了,麻烦一些Top

5 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-04 10:09:20 得分 3

可以通过ASCII码来判断Top

6 楼signoft(晴天)回复于 2005-04-04 10:24:50 得分 4

CSDN有一篇文档是专门关于汉字和字母截取讨论的  
  楼主可以去研究一下  
  http://dev.csdn.net/develop/article/66/66387.shtmTop

7 楼taotao7805(韬滔)回复于 2005-04-04 10:26:13 得分 4

在一个程序中判断是否含有中文字符:  
                      中文字符最高位为1,   并占2个字节,  
                      而字母数字符号等最高位为0,   占1个字节  
   
                      char   buf[50];  
                        则  
                    if(buf[i]&0x80)  
                                  //表示是中文符号  
                    else  
                                  //英文符号Top

8 楼tyro1(栖息的飞鸟)回复于 2005-04-04 11:49:18 得分 4

同意xqk(夏乾坤)    
  //但如果在字母之间包函好几个汉字的话,那么要做截取操作,就必须设置标志了,麻烦一些  
  ..  
  if(c>127)  
  {  
        MessageBox..;  
        i++;  
  }Top

9 楼Programmerjacinth(阿聪)回复于 2005-04-04 12:02:15 得分 0

狂晕,我是这么写的:  
  CString   t;  
  t   =   p.GetAt(i);  
  if   (t>'127')  
  {  
  continue;//是汉字  
  }  
  else  
  {  
                                          //输出  
                                        }  
  结果输出的全部是汉字~~~!!谁能解释下啊~!我到底该相信谁啊?Top

10 楼steedhorse(晨星)回复于 2005-04-04 12:03:49 得分 0

t>'127'  
  改成:  
  t>127Top

11 楼steedhorse(晨星)回复于 2005-04-04 12:06:06 得分 0

如果非要加单引号,请用'\xff'或者'\377'。Top

12 楼steedhorse(晨星)回复于 2005-04-04 12:08:46 得分 0

哦,不对,应该:  
  ((unsigned   char)t   >   (unsigned   char)127)  
   
  还有,对于GBK编码,汉字的第二个字节未必大于127,所以只要发现一个大于127的,后边那个不管是否大于127,都是汉字的第二个字节,应该跳过去。Top

13 楼fvan(RainVan)回复于 2005-04-04 12:15:00 得分 2

求算得的中文字符的Ascii码都是小于0的五位整数,不过是用VB求的。Top

14 楼domustdohz(迷茫)回复于 2005-04-04 12:15:07 得分 1

markTop

15 楼domustdohz(迷茫)回复于 2005-04-04 12:17:20 得分 0

markTop

16 楼qrlvls( 空 气 )回复于 2005-04-04 12:55:52 得分 1

agree   to     steedhorse(晨星)Top

17 楼Programmerjacinth(阿聪)回复于 2005-04-04 13:59:42 得分 0

哦,这回对了,可是谁能解释下我贴的那段代码为什么判断中文和字母正好会反过来吗?Top

18 楼allen7757(漫步VS新月)回复于 2005-04-04 14:39:22 得分 4

汉字最高位为1,所以大于127的就是汉字。  
  char   aa=m_message.GetAt(i);  
  if(aa>=128||aa<0)  
            i++;Top

相关问题

  • 如何从CSTRING中将字符一个个读出(有中文字符的话)?
  • 用字符索引在CString中如何得到正确的中文字符?
  • 关于从CString变量中取中文字符(双字节字符)的方法
  • 求 区分一个CString 中某一个字符是否是英文字符的代码!100分先!
  • 中文字符的处理
  • 中文字符问题
  • 文字符串的问题
  • mysql5.0中文字符问题
  • 英文字符显示
  • 中文字符问题

关键词

  • 汉字
  • 字符
  • 字母
  • 中文
  • 编码
  • ascii码
  • 符号
  • 大于
  • 截取
  • 英文

得分解答快速导航

  • 帖主:Programmerjacinth
  • steedhorse
  • Saimen
  • fanqing
  • xqk
  • oyljerry
  • signoft
  • taotao7805
  • tyro1
  • fvan
  • domustdohz
  • qrlvls
  • allen7757

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo