以下代码将使用空格分解字符串命令,即“”和句号,即“。”。如果我想使用空格和完全停止(同时)的出现来分解命令而不是每个自己例如,例如一个命令如:'你好。你怎么样'将被分成几部分(忽略引号) [你好] [你今天好吗]
char *token2 = strtok(command, " .");
答案 0 :(得分:3)
您最好的选择可能只是使用strstr
抓取您的输入,{{1}}找到子字符串的出现位置,并手动对其进行标记。
这是你提出的一个常见问题,但我还没有看到一个特别优雅的解决方案。然而,上述内容是直截了当的,也是可行的。
答案 1 :(得分:3)
您可以使用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
的实施几乎完全相同,只是调用strstr
和strlen
而不是strcspn
和strspn
。它也可能返回空标记(如果有两个连续的分隔符或两端的分隔符);如果您愿意,可以安排忽略这些。