hdu:2030.汉字统计
Problem Description
统计给定文本文件中汉字的个数。
Input
输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本。
Output
对于每一段文本,输出其中的汉字的个数,每个测试实例的输出占一行。
[Hint:]从汉字机内码的特点考虑~
[Hint:]从汉字机内码的特点考虑~
Sample Input
2
WaHaHa! WaHaHa! 今年过节不说话要说只说普通话WaHaHa! WaHaHa!
马上就要期末考试了Are you ready?
Sample Output
14
9
Author
lcy
Source
Recommend
这个题根据提示,主要考虑两个问题就好:
(1)每个汉字的ASCII码都是小于0的。非汉字都是大于0的。
(2)每个汉字占用两个字节,即占两个ASCII码,算出的个数是ASCII的个数,所以最后的次数要除以二。
下面详解一下汉字机内码吧,我也是看了别人的才知道。
因为汉字处理系统要保证中西文的兼容,当系统中同时存在ASCII码和汉字国标码时,将会产生二义性。例如:有两个字节的内容为30H和21H,它既可表示汉字“啊”的国标码,又可表示西文“0”和“!”的ASCII码。为此,汉字机内码应对国标码加以适当处理和变换。国标码的机内码为二字节长的代码,它是在相应国标码的每个字节最高位上加“1”,即汉字机内码=汉字国标码+8080H例如,上述“啊”字的国标码是3021H,其汉字机内码则是B0A1H。(来自百度百科)
概念:在计算机内部表示汉字的代码。
特点:汉字内码采用两个字节,一个汉字占两个ASCII字符;汉字内码最高位为1,ASCII码最高位为0
汉字内码与区位码的关系:
汉字内码高位字节=(区号)16+(A0)16
汉字内码低位字节=(位号)16+(A0)16
例:汉字“啊”的区位码为1601,则其汉字内码为(B0A1)16。
(来源:https://blog.csdn.net/hurmishine/article/details/49287035)
#include <stdio.h> int main () { int i,n,sum; char c; scanf("%d",&n); getchar(); while (n--) { sum =0 ; while ( (c= getchar())!= '\n') { if (c < 0 ) sum++; } printf("%d\n",sum/2); } return 0; }
(。・∀・)ノ干杯