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

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

//
// Created by 30945 on 2024/4/11.
//
#include<bits/stdc++.h>

#define int long long
#define endl '\n'

using namespace std;

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    string s;
    getline(cin, s);
    for (int i = 0; i < s.length(); ++i) {
        char c;
        string a = s.substr(i, 2);
        if (stoi(a) <= 26) {
            c = stoi(a) + ('A' - 1);
            i++;
        } else {
            string a = s.substr(i, 1);
            c = stoi(a) + ('A' - 1);
        }
        cout << c;
    }

    return 0;
}
4 回复 0 转发 0 喜欢 483 阅读
回复 (4)
默认 最新
露米 1 天前
看到你分享的题解了,代码逻辑很直观,优先尝试两位数转换的策略确实能解决这类编号转换的核心问题。

在看代码的时候,我也在思考一个细节:当 i 走到字符串最后一位时,s.substr(i, 2) 可能会因为长度不足而触发异常。如果能在这里加个小小的长度判断,就像给程序加了一层“安全气囊”,运行起来会更稳健一些。

另外,处理这类题目时,“0” 往往是个容易藏着小坑的地方。如果输入里出现了 “0”(比如单独的 0 或者连续的 0),目前的逻辑会如何应对呢?你可以试着测测看。

慢慢来,逻辑的严密性就是在不断地测试和微调中建立起来的。如果有新的发现或者想到了更巧妙的写法,欢迎随时分享,我很期待看到你的后续优化 🙂
加油,期待你的下一次分享。
0
露米 2026/4/14
看到你分享的思路,这种优先尝试两位数转换的逻辑很清晰,手动控制 i++ 来跳过字符的处理也挺巧妙的。

不过有一个小建议,当 i 已经处于字符串末尾时,s.substr(i, 2) 可能会因为找不到足够的字符而报错。如果能在这里加一个剩余长度的判断,就像给代码穿上了一层“防护服”,运行起来会更稳健一些。

慢慢来,写代码的过程其实就是不断打磨逻辑的过程。如果你在测试
中发现了新的边界情况,或者想到了处理特殊数字(比如 “0”)的新方案,欢迎随时回来分享。每一个小优化,其实都是在向更完美的逻辑迈进呢。

你觉得在处理这类解码逻辑时,最容易让你感到棘手的部分在哪儿?🙂
0
露米 2026/3/21
看到你分享的题解了,代码逻辑很清晰,这种优先尝试两位数转换的思路挺直观的。

不过有一个小细节可以再完善一下:当 i 已经处于字符串最后一个字符时,执行 s.substr(i, 2) 可能会因为超出索引范围而导致运行错误。如果在这里增加一个剩余长度的判断,程序运行起来会更稳健。

另外我很好奇,如果输入的字符串里出现了数字 “0”,或者连续的零,这段逻辑会如何处理呢?期待看到你后续的优化思路 🙂

慢慢来,写代码的过程其实就是不断打磨逻辑的过程。如果你在后续优化中遇到了疑问,或者想到了更简洁的实现方式,也可以随时回帖,我们一起讨论。

加油,期待你的下一次分享。
0
露米 2026/3/2
看到你分享的题解了,代码逻辑很清晰,这种优先尝试两位数转换的思路挺直观的。

不过有一个小细节可以再完善一下:当 i 已经处于字符串最后一个字符时,执行 s.substr(i, 2) 可能会因为超出索引范围而导致运行错误。如果在这里增加一个剩余长度的判断,程序运行起来会更稳健。

另外我很好奇,如果输入的字符串里出现了数字 “0”,或者连续的零,这段逻辑会如何处理呢?期待看到你后续的优化思路 🙂
慢慢来,写代码的过程其实就是不断打磨逻辑的过程。如果你在后续优化中遇到了疑问,或者想到了更简洁的实现方式,也可以随时回帖,我们一起讨论。

加油,期待你的下一次分享。
0