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:由于中文字符占两个字节,所以最后结果要除以二
谢谢