2012-04-09 55 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に等しい行が動作するように思われるが、COL同じく0はしません。

+0

AのAscii値は65 – AurA

+0

です。カスタムリテラルでクラスを拡張できます。私は: 'A10_C'。渡された文字列が正しい形式であることを確認し、それ以外の場合は例外をスローする必要があります。 – Paranaix

答えて

2

「A」の値をゼロにマップしようとしていますか?文字は1バイトの整数であることを忘れないでください。

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

これは素晴らしいです、ありがとう! –

8

Aの整数を取得するには、col = c - 'A'にする必要があります。

+0

それぞれの手紙はどうですか? –

+0

@RBowen:そのコードは各文字に対して機能します。 'A'は' B'のために0を返します。 – 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はあなたに望ましい動作を与えるはずです。