统计输入字符串中汉字的个数 /*统计输入字符串中汉字的个数*难点:汉字的存储表示,GB2312-80标准中,前面15区是图形符号(全角字符,每个字符占2个字节)*而半角状态的字符,属于AS
/*统计输入字符串中汉字的个数
*难点:汉字的存储表示,GB2312-80标准中,前面15区是图形符号(全角字符,每个字符占2个字节)
* 而半角状态的字符,属于ASCII码,每个字符占一个字节
*第16区第01位(0xB0A1)开始到87区第94位(0xF7FE)都是汉字(其他的不是)
*
*/
unsigned char input[81];//存储待处理的字符串
printf("请输入待统计的字符串:");
printf("%d\n", strlen((char*)input));
int total_chars = 0; //总字符数
int chinese_count = 0; //汉字个数
int index = 0; //指向数组当前元素的下标
for (index = 0; index < strlen((char*)input); ++index)//strlen计算含有汉字的时候,把汉字字符算作2个字符
{
if ((input[index] >= 0xB0) && (input[index + 1] >= 0xA1)
&&(input[index] <= 0xF7) && (input[index + 1] <= 0xFE)) //如果在这个范围内的,就是汉字
{
chinese_count++;
index++;
}
else
{
if (input[index] >= 0x80)//如果最高位为1,不是汉字,可能为全角字符也占2个字节
{
index++;
}
}
}
printf("%s中有汉字%d个!\n", input,chinese_count);
在java中实现
/*
*统计输入字符串中汉字的个数
*注意:Java中的字符(含汉字)均采用Unicode编码,而不是内码和ASACII码
*在Unicode中,汉字编码的存储表示范围为[\u4E00,\u9FA5]
*/
import java.util.Scanner;
public class HZCount
{
public static void main(String[] args)
{
int chinese_chars = 0;
Scanner sc = new Scanner(System.in);
System.out.print("请输入待统计的字符串:");
String input = sc.nextLine(); //输入的字符串中可以含有空格符
for(int index = 0;index < input.length();index++)
{
if((input.charAt(index) >= 0x4E00) && (input.charAt(index) <= 0x9FA5))
{
chinese_chars++; //汉字个数加1
}
}
System.out.println(input + "中有" + chinese_chars + "个汉字!");
}
}