【问题标题】:Tokenizing multiple strings simultaneously同时标记多个字符串
【发布时间】:2012-02-27 21:51:00
【问题描述】:

假设我有三个 c 风格的字符串,char buf_1[1024]char buf_2[1024]char buf_3[1024]。我想对它们进行标记,并使用所有三个标记中的第一个标记执行操作,然后对所有三个标记中的第二个标记执行相同操作,等等。显然,我可以调用strtok 并在每次我想要的时候从头开始循环它们一个新的令牌。或者,预处理所有令牌,将它们放入三个数组并从那里开始,但我想要一个更清洁的解决方案,如果有的话。

【问题讨论】:

  • 如果每个字符串的标记数不匹配怎么办?
  • 您有 2 个buf_1s。可能是一个错误
  • @jrok,它们都有相同数量的令牌

标签: c++ strtok


【解决方案1】:

听起来您想要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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2023-03-15
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多