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

时间:2015-02-19 19:00:44

标签: c syntax

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

另外,有没有办法让strtok对字符串进行标记并保持该字符串不被取消?

例如:

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

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

2 个答案:

答案 0 :(得分:2)

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

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

请注意,如果可用,通常应使用strtok_r,即使是解析单个令牌来源也是如此。

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

答案 1 :(得分:1)

所以,曾几何时,strtok的手册页对于不使用它更加明显。无论如何:

  1. strtok_r是可重入的版本;这应该允许你并行地通过令牌。
  2. 据我所知,不可能没有保持字符串被取消;你想使用strcpy制作一个unmangled版本的副本。