ASCII碼與漢字機內碼:
在做HDOJ 2030 漢字統計一題中在討論區看到有樓主發帖說漢字的ASCII碼值為負數。但書中的ASCII碼的范圍又是0—255(其中0——127是國際通用標准碼,128——255是拓展碼)。
經過請教大牛與查閱資料得,漢字並沒有ASCII碼,漢字是又機內碼表示的,即ansi編碼,是系統根據當前地區然後確定的當地編碼,例如大陸的ansi編碼就代表 國標碼GBK編碼。各個地區之間的機內碼是有差異的。
漢字機內碼在計算機的表達方式的描述是,使用二個字節,每個字節最高位一位為1。 計算機中,補碼第一位是符號位,1 表示為 負數,所以 漢字機內碼的每個字節表示的十進制數都是負數。所以統計輸入字符串含有幾個漢字,只只需求出字符串中小於0的字符有幾個
注: 英文的一個字一個字節用了8位(1個字節)
漢字的一個字兩個字節用了16位(2個字節)
下面是題目,很簡單:
2 WaHaHa! WaHaHa! 今年過節不說話要說只說普通話WaHaHa! WaHaHa! 馬上就要期末考試了Are you ready?
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