hdu 2030.汉字统计

Problem Description

统计给定文本文件中汉字的个数。
 
Input
输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本。
 
Output
对于每一段文本,输出其中的汉字的个数,每个测试实例的输出占一行。

[Hint:]从汉字机内码的特点考虑~

Sample Input
2 WaHaHa! WaHaHa! 今年过节不说话要说只说普通话WaHaHa! WaHaHa! 马上就要期末考试了Are you ready?
 
Sample Output
14 9
 
Author
lcy
 
Source
 
Recommend
lcy   |   We have carefully selected several similar problems for you:   2031  2032  2033  2034  2036 
 

  这个题根据提示,主要考虑两个问题就好:
  (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;
}
 

猜你喜欢

转载自www.cnblogs.com/jyroy/p/8975932.html