这道题其实很简单,有好几种做法。
我们都知道大写字母A-Z的编码是65-90,小写字母的编码a-z是97-112。
首先先看这张图片:
由图中的表格可以观察得出:
-
很直观可以看出,大写字母和小写字母的ASCII码值相差32;
-
通过仔细观察相应的二进制,可以得出大写字母和小写字母二进制的第5位(从右往左从0开始数)正好相反。这也恰恰印证了第一点的ASCII码值相差32。
- 所以可得出以下结论:
大小写是由二进制的第5位来区分的。
第5位为1即为小写,第5位为0即为大写
因此可以利用异或、与、或三种运算,保持其他位不变而只改变该位即可。
-
char letter;
-
letter ^= 32, 即按位异或二进制 0010 0000,大写变小写,小写变大写
也可以写成letter ^= 0x20
-
letter |= 32, 即按位或二进制 0010 0000,全部变小写
也可以写成letter |= 0x20
-
letter &= 223, 即按位与二进制 1101 1111, 全部变大写
也可以写成letter &= ~0x20, letter &= -33
法一
#include <iostream>
using namespace std;
int main() {
char a;
cin >> a;//相当于c语言中的scanf("%c",&a);
cout << (char) (a - 32) << endl; //相当于c语言中的printf("%c",(char) (a - 32));
return 0;
}
法二
#include <iostream>
using namespace std;
int main() {
char a;
cin >> a;//相当于c语言中的scanf("%c",&a);
cout << (a &= 223) << endl;
//下面的几个也可以
//cout << (a ^= 32) << endl;
//cout << (a &= ~0x20) << endl;
//cout << (a &= -33) << endl;
return 0;
}
法三
当然要想到库函数啦,要用到头文件 ctype.h
-
tolower()函数是把字符串都转化为小写字母
-
toupper()函数是把字符串都转化为大写字母
#include <iostream>
#include <cctype>
using namespace std;
int main() {
char a;
cin >> a;
cout << (char)toupper(a) << endl;
return 0;
}
望各位大佬指点,QWQ。