如何在C中将字符串拆分为标记?

如何在C中用'&'将字符串拆分为标记?

strtok / strtok_r

 char *token; char *state; for (token = strtok_r(input, "&", &state); token != NULL; token = strtok_r(NULL, "&", &state)) { ... } 

我会这样做(使用strchr() ):

 #include  char *data = "this&&that&other"; char *next; char *curr = data; while ((next = strchr(curr, '&')) != NULL) { /* process curr to next-1 */ curr = next + 1; } /* process the remaining string (the last token) */ 

strchr(const char *s, int c)返回指向sc的下一个位置的指针,如果在s找不到c则返回NULL

您可能可以使用strtok() ,但是,我不喜欢strtok() ,因为:

  • 它修改了被标记化的字符串,因此它不适用于文字字符串,或者在您希望将字符串保留用于其他目的时不是非常有用。 在这种情况下,您必须先将字符串复制到临时字符串。
  • 它合并了相邻的分隔符,因此如果你的字符串是"a&&b&c" ,则返回的标记是"a""b""c" 。 请注意, "a"后没有空标记。
  • 它不是线程安全的。

您可以使用strok()函数,如下例所示。

 /// Function to parse a string in separate tokens int parse_string(char pInputString[MAX_STRING_LENGTH],char *Delimiter, char *pToken[MAX_TOKENS]) { int i; i = 0; pToken[i] = strtok(pInputString, Delimiter); i++; while ((pToken[i] = strtok(NULL, Delimiter)) != NULL){ i++; } return i; } /// The array pTokens[] now contains the pointers to the start of each token in the (unchanged) original string. sprintf(String,"Token1&Token2"); NrOfParameters = parse_string(String,"&",pTokens); sprintf("%s, %s",pToken[0],pToken[1]);