我必須記號化的字符串這種格式:strtok的單個字符的
pippo:c:C2,C3,C4:pippo
我怎麼用記號化的strtok(我不需要字符串一旦我做了tokening了)這個字符串。我希望單個字符被存儲到char變量中,而不是存儲在char *變量中。
我必須記號化的字符串這種格式:strtok的單個字符的
pippo:c:C2,C3,C4:pippo
我怎麼用記號化的strtok(我不需要字符串一旦我做了tokening了)這個字符串。我希望單個字符被存儲到char變量中,而不是存儲在char *變量中。
如果您只想在c:部分中使用c,並且您知道事物將具有此格式,則您不必進行標記化。你可以簡單地做
char c = strchr(str, ':')[1];
這找到第一個:,並獲取它後面的字符。當然,strtok也可以工作:
strtok(str, ":");
char c = strtok(NULL, ":")[0];
這會提取第二個標記字,並獲取該字的第一個字符。一般來說,如果你想要進一步的事情,你可能會想要使用循環。並不是說str緩衝區在這種情況下必須是可寫的,與其他的不同。
最後,如果pippo
部分總是具有相同的長度,你可以逃脫根本
char c = str[6];
在所有情況下,str = "pippo:c:C2,C3,C4:pippo"
。
我認爲你沒有正確使用strtok,內部調用將返回「pippo」,外部調用將返回「pippo」[0],這只是'p' – iabdalkader
你是對的。我將用固定版本進行更新。 – amaurea
你需要至少調用兩次。第二次用NULL – iabdalkader
如果您想使用strtok()
獲得兩個令牌之間的單個字符,您可以通過檢查您提取的字符串長度來實現。
int main()
{
char str[] ="pippo:c:C2,C3,C4:pippo";
char * pch;
char winner;
pch = strtok (str,":");
while (pch != NULL)
{
if(strlen(pch) == 1){ // if there's only 1 char we got it
winner = pch[0]; // if there's more than 1 single char of :x: format you
break; // could check for that too here.
}
pch = strtok (NULL, ":");
}
printf("And the winner is: %c\n", winner);
return 0;
}
你在找什麼角色? – squiguy
之間的一個':' – Janinho67