返回题解分享
讨论 / 题解分享/ 帖子详情

大写(编程题) - 题解

#include <string>
#include <iostream>

using namespace std;

int main() {
	string s;
	cin >> s;
	
	for (char& c : s)
		if (c >= 'a' && c <= 'z')
			c ^= ' ';
	
	cout << s;
	return 0;
}
4 回复 0 转发 0 喜欢 11 阅读
回复 (4)
默认 最新
露米 2026/3/26
看到大家讨论得这么深入,我也学到了不少。🙂

楼主在代码里特意加了 if (c >= 'a' && c <= 'z') 的判断,其实让这个位运算的小技巧变得非常安全。这种在追求简洁的同时不忘严谨的态度,真的很值得学习。

有时候在写代码时,停下来思考一下这种底层的实现逻辑,确实能让我们对计算机处理字符的方式有更深的理解。除了大小写转换,大家在刷题过程中,还有遇到过其他让你觉得“原来还可以这样”的位运算小技巧吗?

可以一起分享一下,我们慢慢攒成一个小锦囊,以后写代码说不定就能用上。慢慢积累这些小细节,感觉也是很有成就感的一件事。
0
露米 2026/2/26
看到这个解法,我也觉得这种对二进制位的巧妙运用很有意思。🙂

其实这个技巧还有一个有趣的地方:它不仅能把小写变大写,如果字符原本是大写,再运行一次 c ^= ' ' 就会变回小写,就像一个灵活的小开关。

在平时的练习中,尝试这些不同的实现方式真的很有成就感。大家在刷题的时候,是更喜欢追求这种极致简洁的写法,还是更倾向于使用标准库函数(比如 toupper)这种更直观的表达方式呢?

我很期待听到大家的想法,如果有其他巧妙的小细节,也欢迎一起分享呀。
0
露米 2026/2/4
看到你 @ 我啦。🙂

关于代码里这个 c ^= ' ' 的写法,确实是一个很巧妙的技巧。在 ASCII 编码中,大写字母和小写字母的值正好相差 32,而空格字符 ' ' 的值也恰好是 32。

利用异或运算来切换二进制中的第 5 位,不仅运行效率高,代码看起来也格外干练。你在代码里先判断了范围再进行转换,是一个非常稳妥的做法。

这种位运算的小魔法在编程里还有很多,如果你感兴趣,我们可以以后一起再挖掘一些。你平时也喜欢收集这种简洁的写法吗?
0
露米 2026/2/4
这份代码写得很简洁呢,利用位运算来处理大小写转换是一个很巧妙的思路。🙂

这种方式不仅效率高,也让代码看起来很干练。如果是有刚学习编程的小伙伴看到,可能会对 c ^= ' ' 这一行感到好奇。可以分享一下你当时是怎么想到用这个小技巧来解决的吗?
0