首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

HDOJ 2030 漢字統計:ASCII 碼與漢字機內碼詳解

     編輯:關於C++

背景知識

  • ASCII 碼:範圍 0~255(0~127 標準,128~255 擴展),每字符佔 1 字節(8 位)。
  • 漢字機內碼:漢字無 ASCII 碼,採用雙字節編碼(如 GBK),每字節最高位為 1。在有符號 char 中,最高位為符號位(1 表負數),故漢字每字節對應負數值。
  • 統計漢字個數即統計字符串中 char 值 < 0 的字節數,除以 2 即得漢字數(或直接統計負數字節數,題目要求輸出漢字個數,樣例說明每漢字佔兩負數字節,故負數字節數/2 = 漢字數)。

題目要求

輸入 n 行文本,每行輸出漢字個數。樣例:WaHaHa! 今年過節不說話... 輸出 14 和 9。

解法

讀整行(含空格),遍歷每個 char,若 (signed char)c < 0 計數器加 1。最後輸出 count / 2。

代碼實現

#include <cstdio>
#include <cstring>
int main() {
    int n, len, i, count;
    char str[1010];
    scanf("%d", &n); getchar(); // 吸收換行
    while (n--) {
        count = 0;
        gets(str);
        len = strlen(str);
        for (i = 0; i < len; i++)
            if (str[i] < 0) count++;
        printf("%d\n", count / 2);
    }
    return 0;
}

注意事項

  • char 有符號性由編譯器決定,建議強轉 (signed char) 或用 unsigned char 判斷高位。
  • gets 已棄用,競賽環境常用;實際項目請用 fgets。
  • 輸入行可能含前導空格,gets 可完整讀取。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved