题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2030
汉字统计
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 26998 Accepted Submission(s): 14730
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,而最高位代表的是符号位,因此他是一个负数,我们知道一个字符占用一个字节,而一个汉字占用两个字节,因此例如:str[0]和str[1]存储的是一个汉字,但其每个二进制码所对应的十进制数是负数,因此统计出所有的负数,然后再除以2既得结果!
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 1010;
int main()
{
char str[MAXN];
int T;
scanf("%d", &T);
getchar();
while(T--)
{
gets(str);
int iNum = 0, iLen = strlen(str);
for(int i = 0; i < iLen; ++i)
if(str[i] < 0)
iNum++;
printf("%d\n", iNum>>1);
}
return 0;
}