免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5651 | 回复: 8
打印 上一主题 下一主题

[C++] 请问谁知道用c++怎么判断一个字符串中的一个字符是否是汉字?并且把这个汉字打印出来 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-23 17:10 |只看该作者 |倒序浏览
我下面贴的这个代码打印不出来这个字符


#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
using namespace std;

bool isChineseChar(const unsigned char ch)
{
        return ( ch & 0x80);
}

int main()
{
        string p("aaa好123错ss");
        string::iterator cw;

        cout << p << endl;
        for (cw = p.begin(); cw != p.end(); cw++)
        {
                if (isChineseChar((unsigned char)*cw))
                {
                //      cout<<"是:"<< p.substr((size_t)cw,2)<<endl;
                        cout<<"是:"<< *cw <<endl;
                        cw++;
                }
                else
                {
                        cout<<"是:"<< *cw <<endl;
                }
        }



return 0;
}

论坛徽章:
0
2 [报告]
发表于 2007-08-23 17:17 |只看该作者
谁有现成的代码,贴给我看看,多谢

论坛徽章:
0
3 [报告]
发表于 2007-08-23 17:20 |只看该作者

回复 #2 hero_ever 的帖子

ANSI编码中连续两个字节高位为1的是汉字

论坛徽章:
0
4 [报告]
发表于 2007-08-23 17:21 |只看该作者
但是如何打印?用string怎么处理?

论坛徽章:
0
5 [报告]
发表于 2007-08-23 17:39 |只看该作者
没人回答?ddddddd丁

论坛徽章:
0
6 [报告]
发表于 2007-08-23 17:44 |只看该作者
对于GB编码,第一个字节如果大于0x80,说明要一次读两个字节
判断一下,读出来就可以了
UTF编码不了解

论坛徽章:
0
7 [报告]
发表于 2007-08-23 17:46 |只看该作者
怎么一次读两个字节?比如我那个程序如何改?3ks

论坛徽章:
0
8 [报告]
发表于 2007-08-23 17:55 |只看该作者
原帖由 hero_ever 于 2007-8-23 17:46 发表
怎么一次读两个字节?比如我那个程序如何改?3ks

  1. unsigned int get_word(const char* inbuf, int &pos)
  2. {
  3.                 unsigned int result = 0;
  4.                 unsigned char *tmpbuf=(unsigned char*)inbuf;

  5.                 if(*(unsigned char*)(tmpbuf+pos) > 0x80 && tmpbuf[pos+1] != '\0'){
  6.                                 result=tmpbuf[pos+1] *256 + tmpbuf[pos];
  7.                                 pos+=2;
  8.                 }
  9.                 else{
  10.                                 result=tmpbuf[pos];
  11.                                 pos++;
  12.                 }
  13.                 return result;
  14. }
复制代码

  1. unsigned char word_char[3];
  2. unsigned int word_int = 0;
  3. word_int = get_word(buff_in, pos);
  4. if(word_int >= 256){               
  5.         word_char[0] = word_int % 256;
  6.         word_char[1] = word_int / 256;
  7.         word_char[2] = '\0';
  8. }
  9. else{
  10.         word_char[0] = word_int;
  11.         word_char[1] = '\0';
  12. }
复制代码

现在放在word_char中了(针对GB编码的)

[ 本帖最后由 litao19 于 2007-8-23 17:56 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-08-23 18:02 |只看该作者
x先多谢以下再看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP