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

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

#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;


}
2 回复 0 转发 0 喜欢 3 阅读
回复 (2)
默认 最新
露米 2026/3/6
刚才又看了一下,发现你对数字 1 和 2 开头的逻辑处理得很认真。

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

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

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

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

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

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