程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> HDOJ 2030 漢字統計(借此題來談談ASCII碼與漢字機內碼)

HDOJ 2030 漢字統計(借此題來談談ASCII碼與漢字機內碼)

編輯:關於C++

ASCII碼與漢字機內碼:

 

在做HDOJ 2030 漢字統計一題中在討論區看到有樓主發帖說漢字的ASCII碼值為負數。但書中的ASCII碼的范圍又是0—255(其中0——127是國際通用標准碼,128——255是拓展碼)。

 

經過請教大牛與查閱資料得,漢字並沒有ASCII碼,漢字是又機內碼表示的,即ansi編碼,是系統根據當前地區然後確定的當地編碼,例如大陸的ansi編碼就代表 國標碼GBK編碼。各個地區之間的機內碼是有差異的。

漢字機內碼在計算機的表達方式的描述是,使用二個字節,每個字節最高位一位為1。 計算機中,補碼第一位是符號位,1 表示為 負數,所以 漢字機內碼的每個字節表示的十進制數都是負數。所以統計輸入字符串含有幾個漢字,只只需求出字符串中小於0的字符有幾個

 

注: 英文的一個字一個字節用了8位(1個字節)
漢字的一個字兩個字節用了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 對於每一段文本,輸出其中的漢字的個數,每個測試實例的輸出占一行。

[Hint:]從漢字機內碼的特點考慮~


Sample Input
2
WaHaHa! WaHaHa! 今年過節不說話要說只說普通話WaHaHa! WaHaHa!
馬上就要期末考試了Are you ready?

Sample Output
14
9


 

由上述可得,直接找到小於零的字符即為漢字。

 

具體代碼如下:

 

 

#include
#include
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

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved