2012-04-09 2 views
0

Я делаю игру с линкорами, поэтому, когда я передаю что-то вроде «A10» в координатную функцию, ему нужно сделать столбец буквой и строкой в ​​число.Преобразование char в int?

Coordinate(std::string coord = "A10") 
    { 
     char c = coord[0]; 
     col = c - 16; 

     int r = atoi((coord.substr(1,2)).c_str()); 
     row = r-1; 
    }; 

Таким образом, в этом примере, проходя A10 должен сделать Col = 0 (А = 0, В = 1, С = 2) и строка = 9.

В строке 9, равный, кажется, работает, но Col равно 0 нет.

+0

Значение Ascii A равно 65 – AurA

+0

Вы можете расширить свой класс с помощью специального литерала. I.e: 'A10_C'. Вы даже должны проверить, что переданная строка находится в правильном формате и в противном случае исключает исключение. – Paranaix

ответ

2

Вы пытаетесь сопоставить значение «А» с нолем? Помните, что символы однобайтные целые числа,

char c = std::toupper(coord[0]); 
if(c >= 'A' && c <= 'Z') 
{ 
    col = c - 'A'; 
} 
else 
{ 
    // TODO: Invalid/error? 
} 
+0

А это отлично, спасибо! –

8

Это должно быть col = c - 'A', чтобы получить целое число для A.

+0

А как насчет каждой буквы? –

+0

@RBowen: этот код работает для каждой буквы, для 'A' он возвращает 0 для' B' 1 и т. Д. – Asha

0

Что вы называете символ «A» это просто забавное название для числа 65 (его ASCII-значение). Согласно this ASCII table, 'B' = 66, 'C' = 67 и так далее. Так что вы должны сделать, это вычислить int column = static_cast<int>(coord[0] - 'A').

0

Десятичное значение для A (0x41) равно 65, так что вы получили бы 49 с вашей текущей математикой. col = c - 65 должен дать вам желаемое поведение.

Смежные вопросы