2012-10-29 47 views
3

我必須記號化的字符串這種格式:strtok的單個字符的

pippo:c:C2,C3,C4:pippo 

我怎麼用記號化的strtok(我不需要字符串一旦我做了tokening了)這個字符串。我希望單個字符被存儲到char變量中,而不是存儲在char *變量中。

+0

你在找什麼角色? – squiguy

+0

之間的一個':' – Janinho67

回答

7

如果您只想在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"

+0

我認爲你沒有正確使用strtok,內部調用將返回「pippo」,外部調用將返回「pippo」[0],這只是'p' – iabdalkader

+0

你是對的。我將用固定版本進行更新。 – amaurea

+0

你需要至少調用兩次。第二次用NULL – iabdalkader

0

如果您想使用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; 
}