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'の値をゼロにマップしようとしていますか?文字は1バイト整数であることを忘れないでください。

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

の10進値A (0x41)65であるため、現在の計算では49になります。col = c - 65あなたに望ましい振る舞いを与えるはずです。

于 2012-04-09T09:52:46.377 に答える