計算機中,補碼第一位是符號位,1表示爲負數,所以漢字機內碼的每個字節表示的十進制數都是負數。
這題正如提示的那樣,從漢字機內碼的特點考慮,很顯然我們都知道,一個漢字佔兩個字節,但由於我們對漢字在ASCII不太瞭解,可能這題不好做,但是其實很好做,在ASCII中有128中字母,都有了各自的相應的數字對應,這麼說來在漢字一定是沒有對應的吧,那麼一定是負的,這就無須解釋了。
因爲不知道所要輸入的一行字符串會有多長則不能通過定義一個字符數組來接受所輸入的一行字符,可以通過e=getchar())!='\n'語句來不停的接收字符,並且邊接收邊判斷if(e<0)如果小於0則表明接收的是一個漢字的一半(漢字佔兩個字符),然後計數器加一,最終漢字的個數是計數器值的一半!!
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main()
{
int n,i,j,k,l;
cin>>n;
getchar();
while(n--)
{
char e;
int sum=0;
while((e=getchar())!='\n')
if(e<0)
sum++;
cout<<sum/2<<endl;
}
return 0;
}