C++采用的是ANSI編碼,是ASCLL編碼的進階
字符串可以用ANSI,但是char不行
ASCLL編碼是DOS時代的東西了
下面來說怎么判斷漢字:
給一個函數
bool check(unsigned char c)
{
if (c > 0X80)
return true;
else
return false;
}
提示:Unsigned Char可以接受ANSI,光是Char不行
此函數的意思是傳入一個字,判斷是不是漢字,以地址判斷。
完整程序:
#include <iostream>
using namespace std;
bool check(unsigned char c)
{
if (c > 0X80)
return true;
else
return false;
}
int main()
{
bool mark = check('c');
cout << int(mark) << endl;
return 0;
}
所以我們可以實現曾經的夢想,在統計字符中加入統計漢字😄
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool check(unsigned char c){
//通過字節碼進行判斷
return c >= 0x80;
}
int main()
{
string str;
int LowerCase, UpperCase; //大寫,小寫
int space = 0;
int digit, character; //數字,字符
int chinese = 0; //中文
digit = character = LowerCase = UpperCase = 0;
getline(cin, str);
for (int i = 0; i < str.size(); i++) {
if (str[i] >= 'a' && str[i] <= 'z')
LowerCase ++;
else if (str[i] >= 'A' && str[i] <= 'Z')
UpperCase ++;
else if (str[i] >= '0' && str[i] <= '9')
digit ++;
else if (check(str[i])){
cout << str[i] << endl;
chinese ++;
}
else if (str[i] == ' ')
space ++;
else
character++;
}
printf("大寫%d個,小寫%d個,數字%d個,字符%d個,漢字%d個,空格%d個\n", UpperCase, LowerCase, digit, character, chinese / 2, space);
return 0;
}
TIPS:由於中文字符占兩個字節,所以最后結果要除以二
謝謝