簡體   English   中英

如何分割字符?

[英]How to split a char?

在為大學分配作業時,我需要使用strtok來獲取用戶對網格的輸入,例如b1-d4會將一塊從b1移到d4。 我目前正在使用strtok將b1-d4拆分為b1的開始位置和d4的結束位置。 現在,我想將此b1拆分為“ b”和“ 1”,這樣我就可以將b轉換為1的整數(因為它以0開頭),然后將1轉換為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拆分為兩個char,或者為“ b”和“ 1”的char數組。 我要解決所有這些錯誤嗎? 提前致謝。

如果您的令牌將始終具有相同的長度

char b;
int  x;

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

假設token指向字符串"b1" ,則b將具有字符b的值,而x將是整數1 您必須檢查令牌是否可拆分,即它有2個字符。

c中的字符串不過是由特殊字符'\\0'終止的字節序列,因此例如strlen()計算遇到'\\0'之前的字節數。

由於令牌是指向存儲這些字節的內存的指針,因此使用數組下標運算符在將索引值(即token[0] == *token;前移后會取消引用該指針token[0] == *token; token[1] == *(token + 1); 我希望這可以澄清。

如果要將b轉換為整數,則也應注意大寫,因此您可能需要執行以下操作

int b_integer;

if (b >= 'a')
    b_integer = b - 'A';
else
    b_integer = b - 'a';

推薦

不要故意使用strlen()函數來計算字符串的長度,該長度不會存儲在任何地方, strlen()會在每次調用時對其進行計算,因此您實際上應該存儲返回的值並使用它。

此外,您永遠不會檢查對strtok()的第一次調用是否返回非NULL值。

考慮到有效令牌的格式為<single_letter><one_digit_number> ,您可以使用index來獲取值。

例如,

start=strtok(input, DELIMS);

現在,如果start包含A1

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

如果要獲取存儲在start[1]中的ASCII的相應int值,則可以簡單地使用int move = (start[1] - '0') ,它將為您提供int作為 int

對於您的問題:

所以我可以將b轉換為1的整數(因為它以0開頭),然后將1轉換為0的整數

檢查以下代碼:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM