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

时间:2010-06-22 02:48:19

标签: 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;

}

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

6 个答案:

答案 0 :(得分:9)

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

if (letter == 'A')
              ^ note the single quotes

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

int charIndex = (letter - 'A') + 1;

在ASCII字符集中,字母位于连续索引处,因此可行。这可能不适用于其他字符集。

答案 1 :(得分:4)

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

int intValue(char value)
{
    return (value - 'A') + 1;
}

至于你得到的错误,在C / C ++中,双引号字符串是char*(或者更准确地说是char[],但差别在这里并不重要)。这就是您收到错误的原因:您要尝试在charchar*之间进行比较。

答案 2 :(得分:1)

试试这个:

return letter - 'A' + 1;

(尽管您可能希望处理超出范围的letter输入)

请注意,char是单个字符,使用单引号:'A'。字符串是多个字符并使用双引号:"ABC"

您可以将字符视为整数(它们的ascii值)并对其进行操作。

答案 3 :(得分:1)

字符及其ASCII值整数是可互换的。字符的ASCII值减去'A'的ASCII值将为0,因此添加1将为您提供1:

return letter - 'A' + 1;

从技术上讲,你也可以减去'@'(表格中'A'之前的字符),但我认为它可能不太清楚。您的问题是您使用的是"A"而不是'A';前者是一个字符串(技术上是指向一个字符的指针),而后一个是单个字符

答案 4 :(得分:1)

更便携的实现涉及搜索字符数组并使用索引作为您的值:

int Value_From_Char(char c)
{
  static const char valid_letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  const std::string letter_str(valid_letters);

  // Search the letters for the given char.
  std::string::size_type  position = 0;
  position = letter_str.find(c);
  int result = 0;
  if (position == std::string::npos)
  {
    result = -1;
  }
  else
  {
    result = (int) position;
  }
  return result;
}

此功能也适用于UTF格式。此方法不会对整理顺序进行任何假设。

答案 5 :(得分:0)

一种可能的方法是使用从charint的明确演员:

#include <iostream>

int main()
{
    char c;
    std::cout << "Enter a character: ";
    std::cin >> c; // for more than one chars you may need to use getline() or ignore()

    std::cout << "ASCII value of: " << c << ", is: " << int(c) <<".\n";
}

输入:

  

p

输出:

  

ASCII value of: p, is: 112.