2012-04-09 281 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(A = 0,B = 1,C = 2)和行= 9

行等於9似乎工作但山口同樣0不。

+0

A的Ascii值是65 – AurA 2012-04-09 09:49:49

+0

您可以使用自定義文字擴展您的類。即:'A10_C'。你甚至應該檢查傳入的字符串格式是否正確,否則會拋出異常。 – Paranaix 2012-04-09 10:00:02

回答

2

您是否試圖將'A'的值映射爲零?請記住,字符是單字節整數,

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

啊,這很好,謝謝! – 2012-04-09 10:24:36

8

應該是col = c - 'A'來得到A的整數。

+0

雖然每封信都怎麼樣? – 2012-04-09 10:23:40

+0

@Rowowen:這段代碼適用於每個字母,對於'A'而言'B'1返回0等。 – Asha 2012-04-09 10:27:19

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應該給你想要的行爲。