注册 登录
编程论坛 C++教室

新手学习!! 如何区分字符串中的汉字还是英文??

zx123gy 发布于 2007-08-09 11:35, 2413 次点击

比如说 这样一个字符串 char str[30] 让用户输入字符~~~
用户输入 i like 编程论坛.
可是 英文和标点符号只占1个字节,而汉字占了2个字节,我怎么才能区分出 那个是汉字 哪个是 英文 哪个是标点符号???

8 回复
#2
aipb20072007-08-09 11:44
没有汉字还好处理,加上汉字,麻烦了。

mark下。
#3
zx123gy2007-08-09 11:46
不懂~~~~~
#4
野比2007-08-09 20:44

汉字由2个字节组成...
为了和标准ASCII码(0-127)区别开, 所以汉字每个字节的最高位都置1..

1xxx xxxx 1xxx xxxx (2个字节的汉字..)
所以你判断字节最高位是否为1就可以了..

假设指针char* p指向当前待判断字节...
if(*p && 0x80) //0x80 = 1000 0000
printf("这可能是汉字字节");


注意, 扩展ASCII码(128-255)的最高位也是1, 所以可能出现判断失误...

其实汉字编码还有一套完整的规则, 原来我并没有去深研, 现在忘得也差不多了,
所以只能把我还记得的部分拿来讲一下..
哪位有兴趣和精力可以去查下资料, 然后帖过来...

#5
野比2007-08-09 20:47

关于乱码
之所以在DOS下显示汉字是乱码, 就是因为DOS下将汉字作为单字节拆开来处理,
这时就会把汉字字节当成扩展ASCII, 都是一些符号, 所以看起来是乱码了..

#6
zx123gy2007-08-10 10:26
谢谢 楼上大哥~~
有收获
#7
百年不亮2007-08-10 12:37
这个,着程序编译时可以通过宏定义决定用混合编码还是纯粹的UNICODE,混合编码有的字符一个字节有的两个,双字符编码所有字符都是两个。VC默认用混合编码
#8
野比2007-08-10 13:16

不亮...LZ是要判断...不是记数啥的...
用了unicode反而不好弄了...

#9
terisevend2007-08-11 01:59
LZ, 我刚刚在GAMERES那里看到你的贴...和这问题一样...
[QUOTE]
引自GAMERES BBS...

POSTED BY OSFG

--------------------------------------------------------------------------------
Re:新手学习!! 如何区分字符串中的汉字还是英文??

看你的 (BYTE)ch > 128不 大是汉字小是英文

[/QUOTE]
1