C++ 将字符转换为int?

C++ 将字符转换为int?,c++,C++,我正在制作一个战舰游戏,所以当我将诸如“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

我正在制作一个战舰游戏,所以当我将诸如“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的行似乎有效,但等于0的列无效。

应该是
col=c-'A'
才能获得
A的整数。

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

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

如果(c>='A'&&c你所说的字符'A'只是数字65(其ASCII值)的有趣名称。
根据,'B'=66,'C'=67等等。那么您应该做的是计算
int column=static\u cast(坐标[0]-'A')
A(0x41)的十进制值
65
,所以你现在的数学成绩是49。
col=c-65
应该会给你想要的行为。

你可以用一个自定义的文本来扩展你的类。例如:
A10_c
。你甚至应该检查传递的字符串的格式是否正确,否则会抛出一个异常。但是每个字母呢?@RBowen:该代码对每个字母都有效,对于
A
它对
B
1返回0,以此类推。