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 可完整讀取。