首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

汉字统计,该怎么处理

2014-04-19 
汉字统计Problem Description统计给定文本文件中汉字的个数。Input输入文件首先包含一个整数n,表示测试实例

汉字统计
Problem Description
统计给定文本文件中汉字的个数。

Input
输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本。

Output
对于每一段文本,输出其中的汉字的个数,每个测试实例的输出占一行。[Hint:]从汉字机内码的特点考虑~

Sample Input
2WaHaHa! WaHaHa! 今年过节不说话要说只说普通话WaHaHa! WaHaHa!
马上就要期末考试了Are you ready?

Sample Output
14
9
 我的代码:
#include<stdio.h>
int main()
{
int num,i,j,count;
char a[100][100];
 scanf("%d",&num);
 for(i=0;i<num;i++)
  scanf("%s",a+i);
  for(i=0;i<num;i++)
  {
 for(j=0,count=0;a[i][j]!=0;j++)
     if(!((int)a[i][j]>=0&&(int)a[i][j]<=127)) count ++;//不在asc码中的都算中文,因为实在      //看不懂网上所写的汉                                                                           //字机内码的特点,貌似只有在文字有标点的的时候出错
 printf("%d\n",count/2);
  }
}
[解决办法]

#include <stdio.h>

int isChinese(int ch )
{
return  ch & 0x80;
}

int main()
{
char ch[1000]="WaHaHa! WaHaHa! 今年过节不说话要说只说普通话WaHaHa! WaHaHa!\0";
int i=0, count=0;

for(i=0; i < 1000; i++)
{

if(isChinese(ch[i]))
count ++;
}
printf("%d\n", count/2);
return 0;
}

[解决办法]
通过位运算来判断,0x80为转义字符,也就是二进制的10000000 。ascii 字符占用一个字节(使用低7位),最高位为0,另外,汉字机内码在计算机的表达方式的描述是,使用二个字节,每个字节最高位一位为1。计算机中, 补码第一位是符号位, 1 表示为 负数, 所以 汉字机内码的每个字节表示的十进制数都是负数,结果要除以2,不要忘了。因为汉字占用两个字节。进行按位与运算后,是英文字符返回0,是中文汉字则返回128.还可以通过判断他的每一个字节是否小于零(因为最高位为符号位),小于0则是中文汉字,否则反。

热点排行