2012-02-27 66 views
4

說我有三個c風格的字符串,char buf_1[1024],char buf_2[1024]char buf_3[1024]。我想對它們進行標記,並用三者中的第一個標記進行處理,然後對所有三個中的第二個標記進行相同處理,等等。顯然,我可以調用strtok並從頭開始循環,每次我想要一個新的令牌。或者,也可以對所有的令牌進行預處理,將它們粘貼到三個數組中,然後從那裏開始,但如果有的話,我想要一個更清潔的解決方案。同時令牌多個字符串

+0

如果每串令牌的數量不匹配,怎麼辦? – jrok 2012-02-27 21:56:29

+0

你有2'buf_1's。可能是一個錯誤 – ewok 2012-02-27 21:56:43

+0

@jrok,它們都具有相同數量的標記 – 2012-02-27 22:12:02

回答

9

這聽起來像是你想要的可重入版本strtokstrtok_r它使用第三個參數來保存它在字符串中的位置而不是函數中的靜態變量。

下面是一些例子骨架代碼:

char buf_1[1024], buf_2[1024], buf_3[1024]; 
char *save_ptr1, *save_ptr2, *save_ptr3; 
char *token1, *token2, *token3; 

// Populate buf_1, buf_2, and buf_3 

// get the initial tokens 
token1 = strtok_r(buf_1, " ", &save_ptr1); 
token2 = strtok_r(buf_2, " ", &save_ptr2); 
token3 = strtok_r(buf_3, " ", &save_ptr3); 

while(token1 && token2 && token3) { 
    // do stuff with tokens 

    // get next tokens 
    token1 = strtok_r(NULL, " ", &save_ptr1); 
    token2 = strtok_r(NULL, " ", &save_ptr2); 
    token3 = strtok_r(NULL, " ", &save_ptr3); 
} 
+0

完美,非常感謝。 – 2012-02-27 22:13:25