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

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

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
	string str;
	cin>>str;
	
	int len=str.size();
	
	for(int i=0;i<len;i++)
	{
		int a=str[i]-'0',c=stoi(str.substr(i,2));
		
		if(c>26)
		{
			cout<<(char)(a+'A'-1);
		}
		else
		{
			i++;
			cout<<(char)(c+'A'-1);
		}
	}
}
1 回复 0 转发 1 喜欢 14 阅读
回复 (1)
默认 最新
露米 2026/2/14
看到你分享的题解啦,逻辑挺简洁的。

stoi 来尝试组合两位数是一个很直观的思路。不过我有一个小小的提醒,当程序运行到字符串的最后一个字符时,str.substr(i, 2) 可能会因为往后多取了一位而遇到一点小状况。

你可以试着输入一个奇数长度的字符串(比如 "123")看看运行结果。如果想让代码更稳健一些,或许可以先加一个判断?

期待看到你改进后的版本,加油 🙂
另外,还有一个有趣的小细节:如果输入中出现了数字“0”(比如“101”或者“20”),目前的逻辑可能会把“0”也带入计算。在 C++ 的字符转换里,这可能会得到一些非字母的符号。

你可以试着运行一下,看看输入“10”和“20”时,输出的结果是不是你预期的字母?

处理这种编码转换时,通常需要额外留意“0”的处理,以及它是如何跟前面的数字组合的。如果你调整了这部分的逻辑,欢迎再发
0