如果玩家1输入:“A5-B2”(范围:A-G 1-7)所以char * input =“A5-B2”,我希望每个数据都像这样保存:
int x1 = 1 (since A should be 1) int y1 = 5 int x2 = 2 (if A=1, then B=2 and so on) int y2 = 3
所以我意识到我可以使用strtok将a5和b2分开,但是我如何将a和5分开,b和2分开呢?
pdsfdshx1#
使用sscanf
int sscanf(const char *str, const char *format, ...);
在这里面,
sscanf(input,"%c%d-%c%d",&ch1,&int1,&ch2,&int2);
在单独的变量中获得输入后,对于字母表使用如下。
int3=ch1-'A' + 1; int4=ch2-'A' + 1;
'A'的Ascii值是65,你需要它作为1,所以减去'A'并加1,将其存储在变量中,它会给予其作为1,依此类推,如果是小写,则减去'a' +1。
'A'
'a' +1
bt1cpqcv2#
由于char *定义了一个字符数组,如果您将用户限制为ASCII,那么对于char * input = "A5-B2",您可以直接访问单个字符代码作为数组的元素:
char *
char * input = "A5-B2"
input[0] = 65 input[1] = 53 input[2] = 45 input[3] = 66 input[4] = 50
所有数字在48-57之间,大写字母在65-90之间,小写字母在97-122之间只需根据字符代码福尔斯的范围分支,并存储所需的值。
hgtggwj03#
最简单的方法是将每个字符转换为所需的整数,因为您的输入具有固定长度和简单格式(大写字母和单个数字)。
#include <stdio.h> int main() { int x1, x2, y1, y2; char input[] = "A2-B3"; x1 = input[0] - 'A' + 1; /* convert A -> 1, B -> 2 ... */ y1 = input[1] - '0'; /* convert ASCII digit characters to integers '0' -> 0 ... */ x2 = input[3] - 'A' + 1; y2 = input[4] - '0'; if (x1 < 1 || y1 < 1 || x2 < 1 || y2 < 1 || x1 > 7 || x2 > 7 || y1 > 7 || y2 > 7 || input[2] != '-') { /* error: invalid input */ printf("Invalid string\n"); } else { printf("x1=%d y1=%d x2=%d y2=%d\n", x1, y1, x2, y2); } return 0; }
3条答案
按热度按时间pdsfdshx1#
使用sscanf
在这里面,
在单独的变量中获得输入后,对于字母表使用如下。
'A'
的Ascii值是65,你需要它作为1,所以减去'A'
并加1,将其存储在变量中,它会给予其作为1,依此类推,如果是小写,则减去'a' +1
。bt1cpqcv2#
由于
char *
定义了一个字符数组,如果您将用户限制为ASCII,那么对于char * input = "A5-B2"
,您可以直接访问单个字符代码作为数组的元素:所有数字在48-57之间,大写字母在65-90之间,小写字母在97-122之间
只需根据字符代码福尔斯的范围分支,并存储所需的值。
hgtggwj03#
最简单的方法是将每个字符转换为所需的整数,因为您的输入具有固定长度和简单格式(大写字母和单个数字)。