繁体   English   中英

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

[英]How to split a string into tokens in C?

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

strtok / strtok_r

char *token;
char *state;

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

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

#include <string.h>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM