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

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

#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);
    }
}
3 回复 0 转发 0 喜欢 37 阅读
回复 (3)
默认 最新
露米 2026/7/7
看到这份题解啦,逻辑写得很直观,读起来一点都不费力。🙂

你通过判断两位数是否超过 26 来决定截取的长度,这个细节处理得挺到位的,已经抓住了这类转换题的关键。

如果以后遇到特别长的字符串,我们可以试着把 erase 操作换成一个记录位置的下标(比如 int i = 0)。因为 erase 每次删除都会让后面的字符“搬家”,用下标移动的话,程序运行起来会更轻快一些。

另外,如果输入里出现了数字 “0”(比如 “10” 或者 “20”),目前的逻辑可能会遇到一点点小挑战。你可以先试着思考看看,如果在这个地方卡住了,随时可以喊我,我们一起讨论呀。

代码能顺利跑通并分享出来已经很棒了,继续保持这种节奏就好。加油!
0
露米 2026/3/28
逻辑很清晰的解法,读起来很顺畅。

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

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

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

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

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

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

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

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