首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析字符串,具有超过15个字符的boost-spirit

解析字符串,具有超过15个字符的boost-spirit
EN

Stack Overflow用户
提问于 2017-02-13 12:02:19
回答 1查看 64关注 0票数 2

我有一个有点简单的问题,不知怎么找不到答案。在分析更大的语法时,我发现解析任何大于15个字符的字符串都会导致解析器返回失败。解析器如下所示:

代码语言:javascript
复制
namespace parser {
    template <typename Iterator>
    struct p_grammar : qi::grammar<Iterator, standard::space_type> {
        p_grammar() : p_grammar::base_type(spec) {
           spec = "qwertyuiopasdfgh";
        }
        qi::rule<Iterator, standard::space_type> spec;
    };

并将在另一个函数中运行:

代码语言:javascript
复制
void MainWindow::parserTest() {
    typedef parser::p_grammar<std::string::const_iterator> p_grammar;
    p_grammar grammar;
    using boost::spirit::standard::space;
    std::string::const_iterator iter = editor->toPlainText().toStdString().begin();
    std::string::const_iterator end = editor->toPlainText().toStdString().end();

    if ( phrase_parse(iter,end,grammar,space) ) {
        outputLog->append("Parsing succesfull");
    } else {
        outputLog->append("Parsing failed");
    }
}

删除"qwertyuiopasdfgh“中的最后一个字符,因此只存在15个字符,使其解析没有失败。

感觉好像我忽略了一些显而易见的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-13 21:04:02

您应该使用有效的迭代器:

代码语言:javascript
复制
std::string value = editor->toPlainText().toStdString()
std::string::const_iterator iter = value.begin(), end = value.end();

你把迭代器用在一个临时的没有存储的地方。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42203571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档