在c中标记化

时间:2011-10-05 23:31:20

标签: c

我正在尝试使用所有非字母字符作为分隔符来标记字符串。

我有一行指定:

char delimiters[] = "1234567890-=!@#$%^&*()_+[]\;',./{}|:"<>?"

但我很确定这不是有效的代码。任何帮助是极大的赞赏。感谢。

2 个答案:

答案 0 :(得分:2)

使用标准库对字符串进行标记可以使用strtok完成。它有一种特殊的方式可以调用它:在第一次调用时,传入输入字符串和分隔符,strtok返回第一个标记。之后,每当您使用strtok调用NULL并将分隔符作为参数时,您将获得后续令牌。

Consult a reference了解更多信息。下面的代码示例基于链接网站上的代码示例。

正如所说,你必须使用"\来逃避\"\\个字符。

/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="This is a sample string: name@example.com";
  const char delimiters[] = "1234567890-=!@#$%^&*()_+[]\\;',./{}|:\"<>?"
  char * pch;

  printf ("Splitting string \"%s\" into tokens:\n",str);

  pch = strtok (str, delimiters);
  while (pch != NULL)
  {
    // pch now point to a token in your string
    printf ("%s\n",pch);
    pch = strtok (NULL, delimiters);
  }
  return 0;
}

答案 1 :(得分:1)

您需要使用"转义\\

const char delimiters[] = "1234567890-=!@#$%^&*()_+[]\\;',./{}|:\"<>?"

但是,如果您真的想要匹配“所有非字母字符”(在这种情况下,您的字符列表严重不足),您应该使用内置的C函数,例如isalpha