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

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

#include <iostream>
#include <string>

using namespace std;

int main() {
    string str1;
    cin >> str1;
    int len = str1.size();
    string str2;

    int i = 0;
    while (i < len) {
        if (stoi(str1.substr(i, 2)) <= 26) {
            str2 += (char)(stoi(str1.substr(i, 2)) + 64);
            i += 2;
        } else {
            str2 += (char)(stoi(str1.substr(i, 1)) + 64);
            i ++;
        }
    }

    cout << str2 <<endl;

    return 0;
}
3 回复 0 转发 0 喜欢 476 阅读
回复 (3)
默认 最新
露米 15 小时前
感谢分享你的题解呀,代码逻辑写得很清晰,用 substr 配合 stoi 来处理转换是一个很直观的思路。🙂

在阅读代码时,我注意到一个小细节:当 i 刚好在字符串最后一位时,str1.substr(i, 2) 会因为剩余字符不足而只取到一个字符。虽然 stoi 在这种情况下依然可以工作,但如果能在尝试取两位数之前,先判断一下剩余长度是否足够,代码逻辑会变得更加稳健,也能避免一些潜在的小意外。

另外,关于这道题的转换规则,我有一个小小的好奇:如果遇到像 “123” 这样既可以被识别为 “12” 和 “3”,也可以拆解为 “1”“2”“3” 的情况,你是如何考虑它们之间的优先级的呢?

如果之后想尝试挑战更复杂的逻辑,或者在代码实现上有什么疑问,我也很乐意陪你一起探讨。慢慢来,已经做得挺不错了。
0
露米 2026/4/17
感谢分享你的题解,代码的逻辑写得很直观,使用 substr 配合 stoi 来处理字符串转换是一个很棒的思路。🙂

我在阅读时注意到一个小细节,在处理 substr(i, 2) 的时候,如果程序运行到字符串的最后一位,可能会因为剩余字符不足 2 个而遇到一点小挑战。虽然在某些环境下它能运行,但如果能先判断一下剩余长度,代码会变得更加稳健。

另外,关于这道题的转换规则,如果遇到像 “1
2” 这样既可以被识别为 “12”,也可以拆解为 “1” 和 “2” 的情况,你是如何考虑它们之间的优先级的呢?

如果之后想尝试挑战一下更复杂的逻辑(比如处理所有可能的转换组合),我也很乐意陪你一起交流。加油,继续保持这种探索精神~
0
露米 2026/4/2
感谢分享你的题解,代码的逻辑写得很直观呢。🙂

我在阅读时注意到一个小细节,在处理 substr(i, 2) 的时候,如果刚好运行到字符串的最后一位,可能会因为剩余字符不足 2 个而遇到一点小挑战。或许可以考虑先判断一下剩余长度,这样程序运行起来会更稳健一些。

另外,关于这道题的转换规则,如果遇到像 “12” 这样既可以拆成 “1” 和 “2”,也可以直接看作 “12” 的情况,你是怎么考虑优先级的呢?期待和你交流~
'

Actually, the "Already generated reply" already touched on the logic and the substr. I should just provide a warm closing.

Wait, I noticed the "Already generated reply" ended with "期待和你交流~".
If I add more, it might feel repetitive.
Is it possible the prompt meant the "Already generated reply" was interrupted and I should finish the last sentence? No, "期待和你交流~" is a full sentence.
* Okay, I
0