0

我不知道为什么我的代码返回了错误的值。输入“a”返回 97,“z”返回 122。我在做什么失踪?

  int main()
  {
enum Alphabet {a = 1, b = 2, c = 3,d = 4,e = 5,f = 6,g = 7,h = 8,i = 9,j = 10,k =     11,l = 12,m = 13,n = 14,o = 15,p = 16,q = 17,r = 18,s = 19,t = 20,u = 21,v = 22,w = 23,x =     24,y = 25,z = 26 };
int jon;
char input;
cout << "Enter a letter and I will tell you it's position in the alphabet ";
cin >> input;
while (!isalpha(input))
{
    cout << "Try Again.  Enter a letter and I will tell you it's position";
    cin >> input;
}
Alphabet inputEnum = static_cast<Alphabet>(input);
cout<<inputEnum;
cin>>jon;
return 0;
}
4

3 回答 3

1

枚举将编译时标识符(例如abc)与整数值相关联。它们不会将运行时值char(例如'a', 'b', 'c', 注意引号)与整数相关联。它们已经是整数,它们的值由您的实现使用的字符集决定。几乎每个实现都使用 ASCII 或与 ASCII 兼容的东西,这解释了你得到的值。看来您想要的是一张地图:

std::map<char,int> alphabet;
alphabet['a'] = 1;
alphabet['b'] = 2;
etc...

或者也许是一个简单的功能:

int alphabet(char c)
{
    switch(c)
    {
        case 'a': return 1;
        case 'b': return 2;
        etc...
    }
}

如果您想假设字符集是 ASCII 或 ASCII 兼容(一个相当安全的假设),那么您的函数可以更简单:

int alphabet(char c)
{
    if (c >= 'a' && c <= 'z')
        return c - 'a' + 1;
    else
        // c is not a lowercase letter
        // handle it somehow
}
于 2013-10-17T00:21:37.453 回答
0

好吧,一个 char (就像你的input变量)实际上只是一个整数值。当与字母相关联时,例如a,它们按 ASCII 值排列。的 ASCII 值a是 97,因为b它是 98,依此类推。

获得所需内容的一种更简单的方法是:

int inputPosition = input - 'a' + 1;
cout << inputPosition;
于 2013-10-17T00:23:23.923 回答
0

虽然是一个老问题,但我想我可能会记下这一点,以防其他人想要一种方法来做类似于 OP 的事情。

我遇到了同样的问题,但像 OP 一样,我不想坐在那里,填写一个长长的 26 格开关块。所以相反,我想出了一种更好、更省时的方法:

#include <ctype.h>
#include <string>

// Takes in a alphabetic char, and returns 
// the place of the letter in the aplhabet as an int.
int AlphabetCode(char _char){
    // Used to compare against _char.
    char tempChar = 'A';
    // Cycle through the alphabet until we find a match.
    for (int cnt = 1; cnt < 26; cnt++) {
        if (tempChar == toupper(_char)) {
            return cnt;
        }
        else {
            // Increment tempChar.
            // eg: A becomes B, B becomes C etc.
            tempChar++;
        }
    }
}
于 2016-04-11T21:40:02.167 回答