码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 2030.汉字统计

时间:2018-05-01 14:09:20      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:print   recommend   asc   nbsp   统计   put   语言   程序设计   区位码   

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;
}

 

 

hdu 2030.汉字统计

标签:print   recommend   asc   nbsp   统计   put   语言   程序设计   区位码   

原文地址:https://www.cnblogs.com/jyroy/p/8975932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!