我正在尝试编写一个可以将数字转换为字母的代码。例如,1将是'A',2将是'B',3将是'C',依此类推。我想写下26条陈述。我想知道是否有更好的方法来做到这一点......
谢谢!
答案 0 :(得分:21)
使用字母数组。
char nth_letter(int n)
{
assert(n >= 1 && n <= 26)
return "abcdefghijklmnopqrstuvwxyz"[n-1];
}
答案 1 :(得分:7)
如果您可以依赖于使用连续的ASCII字符集,那么您可以转换
char intToAlphabet( int i )
{
return static_cast<char>('A' - 1 + i);
}
如果你有时可以依赖这个事实,例如您可以为特定目标设置编译器标志或类似标记,也可以将此代码用于该特定构建。
否则使用静态查找表(正如其他人所建议的那样)。
请注意,如果您的编号输入来自您知道永远不会超出范围的程序变量,则最好“断言”您的范围检查。
如果输入来自用户提供的数据,用户可能会提供恶意数据,那么您需要一种处理不是“未定义行为”的方法。因此,您必须检查每个值并抛出异常(通知用户更正其数据)或使用某个字符表示输入错误。
答案 2 :(得分:2)
最简单的方法是使用表格:
char
remap( int original )
{
static char const remap[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
return original >= 0 && original < sizeof(remap) - 1
? remap[ original ]
: '?'; // or throw, or ...
}
答案 3 :(得分:1)
类似的东西
my_print(int x)
{
char symbol = (char)('A' + x - 1);
cout << symbol;
}
答案 4 :(得分:0)
如果要将0
转换为a
,将1
转换为b
,将2
转换为c
... {{1} }到25
:
z
Similary,将char covertedChar = (char)('a' + 2);
// Will print 'c'
cout << covertedChar;
转换为0
,A
转换为1
,B
转换为2
... C
到25
:
Z
因此,如果您要将char covertedChar = (char)('A' + 25);
// Will print 'Z'
cout << covertedChar;
转换为1
,将A
转换为2
,将B
转换为3
... {{1 }}到C
,只需减去26
的偏移量即可。
Z