Tokenizing multiple strings simultaneously

大城市里の小女人 提交于 2019-12-10 17:35:06

问题


Say I have three c-style strings, char buf_1[1024], char buf_2[1024], and char buf_3[1024]. I want to tokenize them, and do things with the first token from all three, then do the same with the second token from all three, etc. Obviously, I could call strtok and loop through them from the beginning each time I want a new token. Or alternatively, pre-process all the tokens, stick them into three arrays and go from there, but I'd like a cleaner solution, if there is one.


回答1:


It sounds like you want the reentrant version of strtok, strtok_r which uses a third parameter to save its position in the string instead of a static variable in the function.

Here's some example skeleton code:

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);
}


来源:https://stackoverflow.com/questions/9472865/tokenizing-multiple-strings-simultaneously

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!