【问题标题】:String tokenizer in cc中的字符串标记器
【发布时间】:2023-03-02 23:21:02
【问题描述】:

以下代码将使用空格(即“”)和句点(即“.”)分解字符串命令。如果我想使用空格和句号(同时)的出现来分解命令,而不是每个单独的,例如像这样的命令:'hello .how are you' 将被分成几部分(忽略引号) [你好] [你今天好吗]

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

【问题讨论】:

  • 您需要编写自己的分词器,或者使用第三方解析器/词法分析器生成器(如 lex)或库(我只知道 C++ 解析器库 boost::spirit,不知道任何 C 库)。

标签: c string replace character tokenize


【解决方案1】:

您最好的选择可能是使用 strstr 抓取您的输入,它会找到子字符串的出现,然后手动标记这些。

这是您问的一个常见问题,但我还没有看到一个特别优雅的解决方案。但是,上述内容简单明了且可行。

【讨论】:

    【解决方案2】:

    您可以使用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。它也可能返回空标记(如果有两个连续的定界符或任一端的定界符);如果您愿意,可以安排忽略这些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2011-05-31
      • 1970-01-01
      相关资源
      最近更新 更多