如何从字符中检索整数值?

rEg*_*icS 3 c++ integer character

如何将字符转换为整数值?例如,我一直试图将"A"视为1,将"B"视为2,依此类推.我尝试将字符与字母表中的每个字母进行比较并返回适当的值.

int intvalue(char letter)
{
if(letter == "A")
    return 1;
else if(letter == "B")
    return 2;
else if(letter == "C")
    return 3;
else if(letter == "D")
    return 4;
else if(letter == "E")
    return 5;
else if(letter == "F")
    return 6;
else if(letter == "G")
    return 7;
else if(letter == "H")
    return 8;
else if(letter == "I")
    return 9;
else if(letter == "J")
    return 10;
else if(letter == "K")
    return 11;
else if(letter == "L")
    return 12;
else if(letter == "M")
    return 13;
else if(letter == "N")
    return 14;
else if(letter == "O")
    return 15;
else if(letter == "P")
    return 16;
else if(letter == "Q")
    return 17;
else if(letter == "R")
    return 18;
else if(letter == "S")
    return 19;
else if(letter == "T")
    return 20;
else if(letter == "U")
    return 21;
else if(letter == "V")
    return 22;
else if(letter == "W")
    return 23;
else if(letter == "X")
    return 24;
else if(letter == "Y")
    return 25;
else if(letter == "Z")
    return 26;
Run Code Online (Sandbox Code Playgroud)

}

我得到了"错误:ISO C++禁止指针和整数之间的比较".有谁知道如何解决这一问题?或者甚至更好,一种不同的方式来解决这个问题?我觉得我的上述功能非常蛮力.

Jam*_*lis 9

你需要使用字符文字,而不是字符串文字,例如,

if (letter == 'A')
              ^ note the single quotes
Run Code Online (Sandbox Code Playgroud)

也就是说,如果你愿意假设你在使用ASCII字符集的系统上运行,你可以简单地使用算术:

int charIndex = (letter - 'A') + 1;
Run Code Online (Sandbox Code Playgroud)

在ASCII字符集中,字母是连续的索引,因此这是有效的.这可能不适用于其他字符集.


JSB*_*ոգչ 5

在 C++ 中,achar 一个数字。所以不需要像上面那样复杂的方法:你可以直接使用char。如果你想让它基于 A=1 如上所示,那么你可以这样做:

int intValue(char value)
{
    return (value - 'A') + 1;
}
Run Code Online (Sandbox Code Playgroud)

As for the error you're getting, in C/C++, a double-quoted string is a char* (or, more accurately, a char[], but the difference isn't important here). That's why you're getting an error: you're trying to compare between a char and a char*.