Problem Description
统计给定文本文件中汉字的个数。
Input
输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本。
Output
对于每一段文本,输出其中的汉字的个数,每个测试实例的输出占一行。
[Hint:]从汉字机内码的特点考虑~
Sample Input
2 WaHaHa! WaHaHa! 今年过节不说话要说只说普通话WaHaHa! WaHaHa!
马上就要期末考试了Are you ready?
Sample Output
14
9
思路分析:汉字的机内码使用2个字节,每个汉字的十进制都是负数。因此逐个存取遍历出小于0的字符除以2即得到答案。
-
每个键盘上的键值及字符 在ASC码中都有一个对应,而每个汉字由2个ASC码对应。首字节高位是1的,可能是汉字编码,或者反过来说,汉字编码两个字节的高位为1。ASCII高位为0。
-
汉字编码范围(GB2312),第一字节 第二字节,0xB0-0xF7(176-247) 0xA0-0xFE(160-254)
-
ascll码范围 0-127,可以看出对于汉字,无论第一个字节还是第二个字节,第一位都是1而ascll码的第一位是0。
#include<iostream> #include<cstring> using namespace std; const int N=100000; int main() { int n; cin>>n; int temp=n-1; while(n--) { char a[N]; char c; int sum=0; int i=0; if(n==temp) getchar(); while(c=getchar()) { if(c=='\n') break; a[i]=c; if(a[i]<0)sum++; i++; } cout<<sum/2<<endl; } }