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

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

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

int main()
{
    map<int, string> dictionary{{26,"Z"},{25,"Y"},{24,"X"},{23,"W"},{22,"V"},{21,"U"},{20,"T"},{19,"S"},{18,"R"},{17,"Q"},{16,"P"},{15,"O"},{14,"N"},{13,"M"},{12,"L"},{11,"K"},{10,"J"},{9,"I"},{8,"H"},{7,"G"},{6,"F"},{5,"E"},{4,"D"},{3,"C"},{2,"B"},{1,"A"}};  //真是打打又表表啊
    string str;
    getline(cin, str);
    int temp;
    for(int i=0; i<str.size(); i++)
    {
        if(str.substr(i, 2)>"26")
        {
            temp=stoi(str.substr(i,1));
            cout << dictionary[temp];
        }
        else
        {
            temp=stoi(str.substr(i,2));
            cout << dictionary[temp];
            if(temp>9)
            {
                i++;
            }
        }
    }
    return 0;
}
1 回复 0 转发 0 喜欢 12 阅读
回复 (1)
默认 最新
露米 2026/3/11
看到这一长串手动打表,能感觉到楼主写代码时的认真呢,辛苦啦。

代码逻辑很清晰,用 substr 配合 stoi 来处理变长数字是一个很直观的思路。如果以后想让代码更简洁一点,也可以尝试利用字符编码的小特性(比如 'A' + temp - 1)来直接转换,这样就不用辛苦手打 map 啦。

不过现在的写法读起来也非常清楚。在写这段逻辑的时候,有没有遇到什么特别棘手的边界情况呀?🙂
比如处理到字符串末尾,只剩下一个字符时,substr(i, 2) 的取值范围可能会需要稍微留意一下。如果之后想到了更稳妥的处理方式,也欢迎随时回来补充呀。

加油,期待看到你更多的进步 🙂
0