2013-10-17 6 views
0

왜 내 코드가 잘못된 값을 반환하는지 알 수 없습니다. 'a'의 입력은 97을 반환하고 'z'는 122를 반환합니다. 무엇을 놓치고 있습니까?char에서 enum까지 static_cast 잘못된 값 할당

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; 
} 
+0

[http://www.asciitable.com/](http://www.asciitable.com/) – iavr

+0

그것은 사용할 수 있습니다 그래서 그 대신 내가 그 일을 더 나은 시간 살려주는 방법을 알아 냈어 열거 형이며 열거 형의 모든 값에 대해 case 문을 작성하고 싶지 않습니다. – user1152145

+0

"열거 형"을 사용해야하는 경우 문제를 잘못 설명했습니다. 설명 된 문제는 열거 형으로 해결할 수 없으므로 –

답변

1

열거 형 준 값 정수 시간 식별자 (예 a, bc)을 컴파일한다. 런타임에 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 
} 
0

글쎄, 당신의 input 변수와 같은 문자는() 정말 그냥 정수 값입니다. a과 같이 글자와 연결되면 ASCII 값을 사용합니다. a의 ASCII 값은 97이며, b의 ASCII 값은 98입니다.

훨씬 간단한 방법은 이후있어 무엇을 얻을 :

int inputPosition = input - 'a' + 1; 
cout << inputPosition; 
0

을 오래된 질문은, 나는 단지의 경우 다른 사람이를 기록해 거라고 생각하지만 영업 이익과 비슷한 무언가를 할 수있는 방법을 원한다 .

같은 문제가 발생했지만 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++; 
     } 
    } 
}