c中的字符串标记生成器

下面的代码将使用空格分解字符串命令,即“”和句号,即“。”。 如果我想使用空格和完全停止(同时)的出现来分解命令,而不是每个都自己,例如命令如下:’hello .how are you’将被分解成碎片(忽略引号)[你好] [你今天好吗]

char *token2 = strtok(command, " ."); 

你可以用strstr很容易地做到这一点:

 char *strstrtok(char *str, char *delim) { static char *prev; if (!str) str = prev; if (str) { char *end = strstr(str, delim); if (end) { prev = end + strlen(delim); *end = 0; } else { prev = 0; } } return str; } 

这与strtok的实现几乎完全相同,只是调用strstrstrlen而不是strcspnstrspn 。 它也可能返回空标记(如果有两个连续的分隔符或两端的分隔符); 如果您愿意,可以安排忽略这些。

您最好的选择可能只是使用strstr抓取您的输入, strstr会查找子字符串的出现,并手动对其进行标记。

这是你提出的一个常见问题,但我还没有看到一个特别优雅的解决方案。 然而,上述内容简单易行。