如何拆分char?

时间:2015-01-16 12:17:08

标签: c

为大学分配工作,我需要使用strtok来获取网格的用户输入,例如b1 - d4会将一个部分从b1移动到d4。我目前正在使用strtok将b1 - d4拆分为b1的startingPosition和d4的结束位置。现在我想把这个b1分成" b"和" 1"所以我可以将b转换为1的整数(因为它从0开始)和1到a 整数0。 到目前为止,这是我的代码:

 {
char input[20];
char *start, *end;
int n = 0;

fgets(input, 20, stdin);
/* clear new line */
input[strlen(input)-1]='\0';
/* Extract first string */
if(strlen(input)==0) return 0;

start=strtok(input, DELIMS);
printf("%s\n", start);
n++;
while( n < 2){
end=strtok(NULL, DELIMS);
if (end == NULL) break; else n++;
printf("%s\n\n", end);
}

}

所以基本上它获取输入并将其存储在开始和结束中,因此在移动b1-d4的情况下,我将有* start = b1 * end = d4。我正在努力的部分现在将char * start分成两个字符,或者是一个字符串&#34; b&#34;和&#34; 1&#34;。我错了吗? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

如果您的令牌总是具有相同的长度

char b;
int  x;

b = token[0] - 'a';
x = (int)(token[1] - '0') - 1;

假设token指向字符串"b1",则b将具有字符b的值,x将为整数{{ 1}}。您必须检查令牌是否可拆分,即它有2个字符。

c中的字符串只是由特殊字符1终止的字节序列,因此例如'\0'计算遇到strlen()之前的字节数。

由于token是指向存储这些字节的内存的指针,因此使用数组下标运算符在通过索引值('\0'token[0] == *token;推进指针值之后取消引用指针,我希望这可以澄清。< / p>

如果你想将token[1] == *(token + 1);转换为整数,你也应该处理大写,所以你可能想做类似的事情

b

推荐

不要故意使用int b_integer; if (b >= 'a') b_integer = b - 'A'; else b_integer = b - 'a'; 函数计算字符串的长度,长度不会存储在任何地方,strlen()会在每次调用时计算它,因此您应该实际存储返回的值和用那个。

此外,您永远不会检查第一次拨打strlen()是否返回了非strtok()值。

答案 1 :(得分:1)

考虑到 vaild 令牌的格式为<single_letter><one_digit_number>,您可以使用 index 来获取值。

例如,

start=strtok(input, DELIMS);

现在,如果开始包含A1

  • start[0]A
  • start[1]1 [ASCII]

如果您希望获得int中存储的ASCII的相应start[1]值,您只需使用int move = (start[1] - '0')即可获得int as int

答案 2 :(得分:0)

对于你的问题:

  

所以我可以将b转换为1的整数(因为它从0开始)和1   到0的整数

检查以下代码:

char *p = "b1";
int a,b;

a = (int) (p[0] - 97);
b = (int) (p[1] - '0');