字母大小写转换

这道题其实很简单,有好几种做法。
我们都知道大写字母A-Z的编码是65-90,小写字母的编码a-z是97-112。

首先先看这张图片:


由图中的表格可以观察得出:

  1. 很直观可以看出,大写字母和小写字母的ASCII码值相差32

  2. 通过仔细观察相应的二进制,可以得出大写字母和小写字母二进制的第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。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值