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

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

#include <bits/stdc++.h>
using namespace std;
#define int long long
// #define LL long long
#define endl '\n'

void solve()
{
	string s;
	cin >> s;
	for (int i = 0; i < s.length(); i++)
	{
		int num = stoi(s.substr(i, 2));
		if (num <= 26)
		{
			printf("%c", 'A' + num - 1);
			i++;
		}
		else printf("%c", 'A' + (s[i] - '0') - 1);
	}
}

signed main()
{
	// ios::sync_with_stdio(0);
	// cin.tie(0), cout.tie(0);

	solve();

	return 0;
}
4 回复 0 转发 0 喜欢 497 阅读
回复 (4)
默认 最新
露米 2026/4/10
其实在编程中,处理这种“多位还是单位”的转换逻辑,最核心的就是要给每一个分支都定好清晰的“通行证”。

比如,我们可以试着在 if 的判断条件里,多加一个关于 i + 1 < s.length() 的检查。这样不仅能让 substr 取值更安全,也能确保逻辑在处理最后一个字符时不会走错路。

另外,关于“0”的处理,如果把它看作是一个不能单独转换、也不能作为两位数开头的数字,你觉得在代码里加一个什么样的判断能最快地避开它呢?

不用急着写出完美的代码,先在脑海里或者草稿纸上模拟一下这几种特殊情况。如果你有了新的想法,或者调整了判断逻辑,欢迎随时发出来分享 🙂
慢慢来,逻辑的严谨性就是这样一点点磨出来的。加油!
0
露米 2026/4/4
看到你还在思考这段逻辑,这种耐心地打磨代码的过程真的很宝贵。

我刚才试着带入了一下,如果输入里有 “0”(比如 “30”),s[i] - '0' - 1 的计算结果可能会变成 -1,这会让最终输出的字符变成字母表之前的符号,可能就不太符合预期了。

要不要试着加一个小判断,专门处理一下数字 0 的情况?或者考虑一下,是不是把两位数的判断逻辑再稍微收紧一点点会更好。

不着急,逻辑的严谨性就是这样一点点磨出来的。如果调试的时候发现了什么有趣的现象,也欢迎分享出来,我们一起看看 🙂
另外,当 i 到达字符串最后一个字符时,s.substr(i, 2) 可能会因为剩余长度不足而触发一点小异常,记得也给它加一个小小的保护逻辑。

慢慢改进就好,这种一点点打磨细节的过程,其实也是编程最有趣的地方。加油,我会一直在这里为你打气的!
0
露米 2026/3/5
看到你分享的题解啦,这种优先尝试两位数转换的思路很直观呢。

我在想,如果输入的数字序列里出现了“0”,或者是处理到字符串最后一个字符时,stoi 的取值和 i++ 的跳步逻辑会不会遇到一点小挑战?

可以试着运行一下这类特殊的例子看看,比如输入 103 或者 12。如果发现运行结果和预期不太一样,我们可以再一起讨论如何微调一下判断逻辑 🙂

加油,这种通过实际例子来打磨逻辑的过程
其实也是提升编程直觉的好机会。

期待看到你更新后的思路,如果有哪里卡住了,随时在这里喊我,我会一直都在的。
0
露米 2026/2/26
看到你分享的题解啦,这种优先尝试两位数转换的思路很清晰呢。

我在想,如果输入的数字序列里出现了“0”,或者是字符串在最后只剩下一个数字时,stoi 处理起来会不会遇到一点小挑战?

可以试着运行一下这类特殊的例子看看。如果发现运行结果和预期不太一样,我们可以再一起讨论如何微调一下判断逻辑 🙂
加油,这种通过实际例子来打磨逻辑的过程,其实也是提升编程直觉的好机会。

期待看到你更新后的思路,如果有哪里卡住了,随时在这里喊我,我会一直都在的。
0