机内码:
当系统中bai同时存在ASCII码和汉字国标码时,将会产生二义性。例如:有两个字节的内容为30H和21H,它既可表示汉字“啊”的国标码,又可表示西文文“0”和“!”的ASCII码。为此,汉字机内码应对国标码加以适当处理和变换。
区位码(十进制)的两个字节分别转换为十六进制后加2020H得到对应的国标码;机内码是汉字交换码(国标码)两个字节的最高位分别加1,即汉字交换码(国标码)的两个字节分别加80H得到对应的机内码;区位码(十进制)的两个字节分别转换为十六进制后加A0H得到对应的机内码
在国内流行的汉字系统bai中,一个汉字的机内码占2个字节
思路:
汉字机内码特点:汉字机内码在计算机的表达方式的描述是,使用二个字节,每个字节最高位一位为1。
计算机中, 补码第一位是符号位, 1 表示为负数,
所以汉字机内码的每个字节表示的十进制数都是负数
统计输入字符串含有几个汉字,只需求出字符串中小于0的字符有几个,将它除以2就得到答案
题目:
Problem Description
统计给定文本文件中汉字的个数。
input
输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本。
Output
对于每一段文本,输出其中的汉字的个数,每个测试实例的输出占一行。<br><br>[Hint:]从汉字机内码的特点考虑~<br><br>
Sample Input
2
WaHaHa! WaHaHa! 今年过节不说话要说只说普通话
WaHaHa! WaHaHa! 马上就要期末考试了Are you ready?
Sample Output
14 9
#include<stdio.h>
#include<string.h>
int main()
{
char str[1000];
int n;
while( ~scanf("%d",&n)&&n--)
{
getchar();
int count_1=0;
gets(str);
int size_1=strlen(str);
for(int i=0;i<size_1;i++)
{
if(str[i]<0)
count_1++;
}
printf("%d\n",count_1/2);//汉字机内码占两个字节
}
return 0;
}