2012-04-09 228 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应该给你想要的行为。