c中的字符串标记生成器

时间:2011-08-21 05:16:16

标签: c string replace character tokenize

以下代码将使用空格分解字符串命令,即“”和句号,即“。”。如果我想使用空格和完全停止(同时)的出现来分解命令而不是每个自己例如,例如一个命令如:'你好。你怎么样'将被分成几部分(忽略引号) [你好] [你今天好吗]

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

2 个答案:

答案 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的实施几乎完全相同,只是调用strstrstrlen而不是strcspnstrspn。它也可能返回空标记(如果有两个连续的分隔符或两端的分隔符);如果您愿意,可以安排忽略这些。