0

我正在制作战舰游戏,因此当我将诸如“A10”之类的内容传递给坐标函数时,它需要将列变为字母并将行变为数字。

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) 和 row = 9。

等于 9 的行似乎有效,但 col 同样 0 没有。

4

4 回答 4

8

应该是col = c - 'A'获取 的整数A

于 2012-04-09T09:49:58.227 回答
2

您是否尝试将“A”的值映射为零?请记住,字符是单字节整数,

char c = std::toupper( coord[0] );
if( c >= 'A' && c <= 'Z' )
{
    col = c - 'A';
}
else
{
    // TODO: Invalid/error?
}
于 2012-04-09T09:51:56.177 回答
0

你所说的字符'A'只是数字65(它的ASCII值)的一个有趣的名字。根据这个 ASCII 表,'B' = 66,'C' = 67 等等。所以你应该做的是计算int column = static_cast<int>(coord[0] - 'A')

于 2012-04-09T09:52:33.023 回答
0

的十进制值为,A (0x41)因此65您当前的数学运算将得到 49。col = c - 65应该给你想要的行为。

于 2012-04-09T09:52:46.377 回答