HDU

来源:互联网 发布:手机黄金看盘软件 编辑:程序博客网 时间:2024/06/07 05:49

题目

统计给定文本文件中汉字的个数。
Input
输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本。
Output
对于每一段文本,输出其中的汉字的个数,每个测试实例的输出占一行。

[Hint:]从汉字机内码的特点考虑~

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

想法

汉字内码在计算机中是双字节存储。
java中 char 可以存储两个字节,但是c中char只能存储一个字节。
在计算机中,汉字使用二个字节,每个字节最高位一位为1。 计算机中,补码第一位是符号位,1 表示为 负数。所以 汉字机内码的每个字节表示的十进制数都是负数。英文的一个字一个字节用了8位(1个字节)
汉字的一个字两个字节用了16位(2个字节)

java代码

代码① :

import java.util.Scanner;public class Main{    public static void main(String[] args) {        Scanner it = new Scanner(System.in);        int n=it.nextInt();        it.nextLine();        while(it.hasNext()) {            if(n==0)break;n--;            String s=it.nextLine();            int sum=0;            char a[]=s.toCharArray();            for(int i=0;i<a.length;i++) {                if(a[i]<0||a[i]>255)sum++;            }            System.out.println(sum);        }    }}

代码 ② :转换为字节数组

import java.util.Scanner;public class Main{    public static void main(String[] args) {        Scanner it = new Scanner(System.in);        int n=it.nextInt();        it.nextLine();        while(it.hasNext()) {            if(n==0)break;n--;            String s=it.nextLine();            int sum=0;            byte a[]=s.getBytes();            for(int i=0;i<a.length;i++) {                if(a[i]<0)sum++;            }            System.out.println(sum/2);        }    }}

代码③:汉字内码范围

import java.util.Scanner;public class Main{    public static void main(String[] args) {        Scanner it = new Scanner(System.in);        int n =it.nextInt();        it.nextLine();        while(n-->0) {            String s = it.nextLine();            char a[]=s.toCharArray();            int sum=0;            for(int i=0;i<a.length;i++){                if(a[i] >= 0x0391 && a[i] <= 0xFFE5)                    sum++;            }            System.out.println(sum);        }    }}

c代码

#include<stdio.h>#include<string.h>int main(){    int n;    while(scanf("%d",&n)!=EOF){        getchar();        char a[1000];        for(int i=0;i<n;i++){            gets(a);            int sum=0;            for(int i=0;i<strlen(a);i++)            if(a[i]<0)sum++;            printf("%d\n",sum/2);        }    }            return 0;}

个人博客:陪你一起终身学习!|岳金钊&个人博客