Hint(提示):“从汉字机内码的特点考虑”
联系:Unicode(统一码),使用区码、位码(即区位码)来为汉字字符编码,区位码相当于直角坐标系里的横纵坐标,每一个横纵坐标对应坐标中唯一的点,唯一的汉字。储存方面,区码占1个字节,位码也占1个字节,故一个汉字占用两个字节(十六位),每个字节最高位都是1(因为最高位为0的编码已经被ASII码用了)。
注意:在ASCII码中,使用一个字节(Byte)储存一个字符的编码,对应字符数组char[ ]的一个位置(char类型大小为一个字节对应8位8Bit);在Unicode中,使用两个字节储存一个汉字字符的编码,对应字符数组的两个位置,第一个位置储存区码,后一个位置储存位码。
//简单版
#include <stdio.h>
#include <string.h>
int main(){
int n;
int i;
int cot;
int length;
scanf("%d",&n);
getchar();
while (n--)
{
unsigned char str[1000];//使用unsiged是因为对于汉字,字节的最高位不是符号位
gets(str);
cot=0;
length=strlen(str);
for(i=0 ; i<length-1 ; i++)
{
if (161<=str[i] && str[i]<=254)
{
cot++;
i++;
}
}
printf("%d\n",cot);
}
return 0;
}
优化版:利用了顺序表
待更新