HDOJ 2030漢字統計(この問題でASCIIコードと漢字機内コードについて述べる)
1939 ワード
ASCIIコードと漢字機内コード:
HDOJ 2030の漢字の統計をする1題の中で討論区で漢字のASCIIコードの値がマイナスだとスレ主があることを見ます.しかし、本のASCIIコードの範囲は0-255(うち0-127は国際共通標準コード、128-255は拡張コード)である.
大牛に教えてもらって資料を調べたところ、漢字にはASCIIコードはなく、漢字はまた機内コードで表されている.すなわちansiコードは、現在の地域に基づいてシステムが確定した現地コードであり、例えば大陸のansiコードは国標コードGBKコードを代表している.各地域間の機内コードには違いがあります.
漢字イントラコードのコンピュータでの表現は、2バイトを用いて、各バイトの最上位1ビットが1であると記述されている.コンピュータでは,符号化第1ビットは符号ビットであり,1は負数を表すので,漢字機内符号のバイト毎に示す十進数は負数である.したがって、統計入力文字列にはいくつかの漢字が含まれており、文字列の中で0未満の文字がいくつかあるだけである.
注:英語の1文字1バイトは8ビット(1バイト)漢字の1文字2バイトは16ビット(2バイト)
次はテーマです.簡単です.
漢字統計
HDOJ 2030の漢字の統計をする1題の中で討論区で漢字のASCIIコードの値がマイナスだとスレ主があることを見ます.しかし、本のASCIIコードの範囲は0-255(うち0-127は国際共通標準コード、128-255は拡張コード)である.
大牛に教えてもらって資料を調べたところ、漢字にはASCIIコードはなく、漢字はまた機内コードで表されている.すなわちansiコードは、現在の地域に基づいてシステムが確定した現地コードであり、例えば大陸のansiコードは国標コードGBKコードを代表している.各地域間の機内コードには違いがあります.
漢字イントラコードのコンピュータでの表現は、2バイトを用いて、各バイトの最上位1ビットが1であると記述されている.コンピュータでは,符号化第1ビットは符号ビットであり,1は負数を表すので,漢字機内符号のバイト毎に示す十進数は負数である.したがって、統計入力文字列にはいくつかの漢字が含まれており、文字列の中で0未満の文字がいくつかあるだけである.
注:英語の1文字1バイトは8ビット(1バイト)漢字の1文字2バイトは16ビット(2バイト)
次はテーマです.簡単です.
漢字統計
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 30201 Accepted Submission(s): 16568
Problem Description
指定したテキストファイル内の漢字の個数を統計します.
Input
入力ファイルには、まず、テストインスタンスの個数を表す整数nが含まれ、次にnセグメントテキストが含まれます.
Output
各テキストについて、その中の漢字の個数を出力し、各テストインスタンスの出力は1行を占めます.
[Hint:]漢字機内コードの特徴から~
Sample Input
2
WaHaHa! WaHaHa! WaHaHa! WaHaHa!
Are you ready?
Sample Output
14
9
上記から、ゼロ未満の文字を直接見つけることができるのが漢字です.
具体的なコードは以下の通りです.#include<cstdio>
#include<cstring>
int main()
{
int len,i,n;
char str[1010];
scanf("%d",&n);
getchar();
while(n--)
{
int count=0;
gets(str);
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]<0)
count++;
}
printf("%d
",count/2);
}// , , ,
return 0;
}
2
WaHaHa! WaHaHa! WaHaHa! WaHaHa!
Are you ready?
14
9
#include<cstdio>
#include<cstring>
int main()
{
int len,i,n;
char str[1010];
scanf("%d",&n);
getchar();
while(n--)
{
int count=0;
gets(str);
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]<0)
count++;
}
printf("%d
",count/2);
}// , , ,
return 0;
}