[英]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.