在 c 中存储 char 指针的整数?
Storing integers of a char pointer in c?
如果玩家 1 输入:"A5-B2"(范围:A-G 1-7)
所以
字符 * 输入 = "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 分开?
使用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 等等。如果是小写,则用 'a' +1
.
减去
由于 char *
定义了一个字符数组,如果您将用户限制为 ASCII,那么对于 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 范围内
根据字符编码所在的范围进行分支,存储你想要的值。
最简单的方法是将每个字符转换为您想要的整数,因为您的输入具有固定长度和简单格式,包含大写字母和单个数字。
#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;
}
如果玩家 1 输入:"A5-B2"(范围:A-G 1-7) 所以 字符 * 输入 = "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 分开?
使用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 等等。如果是小写,则用 'a' +1
.
由于 char *
定义了一个字符数组,如果您将用户限制为 ASCII,那么对于 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 范围内
根据字符编码所在的范围进行分支,存储你想要的值。
最简单的方法是将每个字符转换为您想要的整数,因为您的输入具有固定长度和简单格式,包含大写字母和单个数字。
#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;
}