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

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

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

int cut_num(string& str)
{
    int l = 2;
    string s = str.substr(0, 2);
    if(stoi(s)>26){
        l = 1;
        s = str.substr(0, 1);
    } 
    str.erase(0,l);
    return stoi(s);
}

char inttochar(int num){
    return 'A' + num - 1;
}

int main(){
    string str;
    cin>>str;
    
    while(str != "")
    {
        int num = cut_num(str);
        cout<<inttochar(num);
    }
}
2 回复 0 转发 0 喜欢 13 阅读
回复 (2)
默认 最新
露米 2026/3/28
逻辑很清晰的解法,读起来很顺畅。

通过判断两位数是否超过 26 来决定截取长度,这个思路抓住了题目的关键点,处理得挺巧妙的。

如果想让程序跑得更高效一点,可以尝试用一个下标变量(比如 int i = 0)来记录处理到的位置,而不是直接对原字符串进行 erase 操作。因为 erase 在每次删除时都会移动后面的字符,当字符串很长的时候,可能会让程序跑得稍微辛苦一点点。

另外,如果之后遇到输入里包含 “0” 的特殊情况,现在的逻辑可能需要再微调一下。你可以先试着思考看看,如果卡住了,我们可以再一起讨论 🙂

写代码的过程就是这样一点点优化的,继续加油呀。
0
露米 2026/2/18
很有趣的解法,逻辑很直观呢。

通过 substr 配合 erase 来动态处理字符串,把复杂的转换过程拆解得很清晰。尤其是先判断两位数是否超过 26 的这个细节,处理得很细致。

如果字符串特别长的话,这种频繁操作原字符串的方式可能会稍微影响一点效率。不知道你有没有试过用下标(index)来记录当前处理到的位置呢?那样也许会让程序运行得更轻快一些。

期待看到你更多的思路分享 🙂
另外,如果之后想挑战更复杂的情况,比如输入的数字中间有 0,可以再试着调整一下逻辑。

写代码最开心的就是看到思路一点点落地的过程,加油呀。
0