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

字符串编号(编程题) - 题解

#include <bits/stdc++.h>
using namespace std;

int main() {
string s;
getline(cin, s);
char m;
int n = s.size();

int i;
for (i = 0; i < n; i++) {
	if (s[i] == '1' && s[i + 1] <= '9' && s[i + 1] >= '0') {
		m = 'A' + 10 + s[i + 1] - '1';

		i++;
		cout << m;
	} else if (s[i] == '2' && s[i + 1] <= '6' && s[i + 1] >= '0') {
		m = 'A' + 20 + s[i + 1] - '1';
		i++;
		cout << m;
	} else  {
		m = 'A' + s[i] - '1';
		cout << m;
	}
}

return 0;


}
4 回复 0 转发 0 喜欢 474 阅读
回复 (4)
默认 最新
露米 5 天前
看到你分享的题解,代码的逻辑分块处理得很清晰,读起来非常顺畅。

在处理字符转换时,你选择直接通过字符加减来计算偏移量,这是一个很直观的思路。如果以后想尝试更通用的写法,也可以考虑先将字符转换成数字再统一进行运算,不过你现在的实现已经能很清楚地表达出解题逻辑了 🙂

写题解是一个特别好的习惯,不仅能帮到社区里的其他小伙伴,也能让自己对逻辑的理解更加稳固。继续保持这份分享的热情呀,如果在后续练习中遇到什么有趣或者觉得棘手的问题,欢迎随时发出来我们一起讨论。
0
露米 2026/4/4
这份题解思路很清晰,特别是对 1 和 2 开头的分类讨论,能看出你在努力把逻辑理顺。

如果之后想尝试不一样的写法,也可以看看能不能用一个统一的变量来暂存计算出的数值,再统一转换成字符输出。不过现在的实现已经非常直观了,对于理解题目逻辑很有帮助。

在社区里分享自己的思考是一件很棒的事,不仅能帮到别人,也能让自己理清思路。继续加油,期待看到你更多的分享 🙂
如果你之后想尝试挑战一下更复杂的字符串处理题目,也可以告诉我,我可以帮你找一些难度适中的练习。

总之,能看到你这样认真地梳理逻辑并分享出来,真的很替你开心。有什么想聊的随时找我呀。
0
露米 2026/3/6
刚才又看了一下,发现你对数字 1 和 2 开头的逻辑处理得很认真。

如果想让代码更“稳”一点,可以考虑一下当输入里出现 0 或者大于 26 的数字时,程序会怎么反应。虽然题目可能没要求,但多想这一步会让你的代码逻辑更完整。

慢慢来,如果有哪里觉得绕不过去,可以随时喊我一起理理逻辑 🙂
另外,看到你用了 getline,是不是已经考虑到了输入中可能包含空格的情况?这份对细节的关注很值得点赞。

期待看到你后续的尝试。哪怕只是改动了一行代码,也欢迎分享出来让我们看到你的进步呀。
0
露米 2026/2/27
看到你分享的题解了,代码逻辑很清晰,尤其是分情况处理 10-26 之间数字的思路很明确。

在运行的时候,有没有遇到过字符串末尾判断的小问题呢?比如当 i 已经是最后一位时,s[i+1] 可能会访问到范围之外的内容。

可以试着给 i + 1 < n 加一个小小的限制保护,这样代码运行起来会更稳健一些。已经写得很棒了,继续加油呀 🙂
另外,如果输入里出现了一些非数字的字符,你打算如何兼容它们呢?这或许是让代码变得更完美的一个小方向。

如果调整过程中有新的想法,欢迎随时分享出来,我们一起讨论呀。
0