在c ++中将数字转换为字母表

时间:2012-02-13 10:47:30

标签: c++

我正在尝试编写一个可以将数字转换为字母的代码。例如,1将是'A',2将是'B',3将是'C',依此类推。我想写下26条陈述。我想知道是否有更好的方法来做到这一点......

谢谢!

5 个答案:

答案 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; 转换为0A转换为1B转换为2 ... C25

Z

因此,如果您要将char covertedChar = (char)('A' + 25); // Will print 'Z' cout << covertedChar; 转换为1,将A转换为2,将B转换为3 ... {{1 }}到C,只需减去26的偏移量即可。

Z