您的位置:首页 > 其它

对汉字字符的统计

2015-06-15 13:34 288 查看
以GB2312为标准,说一下我对汉字字符统计的一点认识。

ASCII码:一个字符占一个字节,以0开头;

中文字符:一个汉字占两个字节,以1开头。

ASCII码的161-255这中间94个字符很少用,所以用来作为中文字符的编码。但是中文汉字很多,远不止94个,所以我们用94*94=8836个足够来表示日常生活中常用的汉字。

对于汉字的统计,我一开始采用了以下的方法,比较简单易行,可以用来做要求不高汉字不难的简单统计,但是容易出Bug。

因为汉字从0xA0开始编码,其中0xA0即160,在其后包括有中文的标点符号,也算在汉字字符集中。所以我们可以直接考虑用

int ch,count=0;


分别代表汉字的字节和对汉字的计数。

将读取到的汉字字节直接与0xA0作比较

if (ch>0xA0)
count++;


但是要注意,汉字字符占俩字节阿,所以最后要

count/=2;


你以为这就完事儿了?怎么可能!

还有还有还有!!

我们木有考虑到一个问题:

如果所统计的目标文件里面有一些幺蛾子,它们不算是中文字符,但又占两个字节,而且两个字节中说不定满足有大于0xA0的。那如果是这样的话,我们的统计就又出错了,这就是我上面说的容易出Bug的原因。

下面我再介绍一种严谨的统计方法。

本文一开始说了,一个汉字占两个字节,都是以1开头的。所以我们可以考虑分别判断对于一个字符它的两个字节是否都是以1作为开头的,如果是则为中文字符。

因为1作为开头在最高位表示“负”,所以要用unsigned char无符号型来做统计。

(现就这样吧,等我回去补一下位运算再回来更。。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: