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

时间:2010-01-19 07:29:12

标签: c split token

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

3 个答案:

答案 0 :(得分:13)

strtok / strtok_r

char *token;
char *state;

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

答案 1 :(得分:8)

我会这样做(使用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)会返回指向cs的下一个位置的指针,如果NULL中找不到c,则返回s

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

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

答案 2 :(得分:2)

您可以使用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]);
相关问题