有没有办法对两个字符串进行标记并并行处理这些标记?

Is there a way to tokenize two strings and go through the tokens in parallel?

有没有办法对两个字符串进行分词并并行移动分词? (因为我有两个字符串,所以我不能使用 strtok(NULL, "bar") 两次)

此外,有没有办法让 strtok 标记一个字符串并保持该字符串未标记?

例如:

void foo(char* form, char* num){

    char *templ=form, *tempr=num;
    templ = strtok(templ, " ");//but this tokenize form as well

因此,曾几何时,strtok 的手册页更明确地表示不使用它。无论如何:

  1. strtok_r为可重入版本;这应该允许您并行处理令牌。
  2. 据我所知,让 strtok 不保持字符串未标记是不可能的;你会想要使用 strcpy 来制作未损坏版本的副本。

是的,在大多数平台上都有。您可以使用 strtok_r,它是 strtok 的可重入版本,它不会将状态存储在静态内存中:

char *save1, *save2;
temp1 = strtok_r(templx, " ", &save1);
temp2 = strtok_r(temply, " ", &save2);

请注意,如果 strtok_r 可用,您通常应该使用它,即使是解析单个标记源也是如此。

如果 strtok_r 不可用,您可以使用 sscanf 并跟踪要标记化的字符串中的位置。根据您要解决的标记化任务的复杂性,这也可以提供可行的解决方案。