首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找出一种具有振奋精神的表达方式?

如何找出一种具有振奋精神的表达方式?
EN

Stack Overflow用户
提问于 2015-10-16 15:45:29
回答 1查看 98关注 0票数 2

我把这个语法传递给了phrase_parse()

double_[push_back(phoenix::ref(v), _1)] >> *(*blank >> double_[push_back(phoenix::ref(v), _1)])

*(*blank开头的第二个表达式会发现0或更多的“double”。在我的例子中,我想确保它与6个事件完全匹配。有可能在提升精神的情况下做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-16 16:15:33

使用重复指令。在解析数字列表时,也不需要使用语义行为,只需使用%操作符即可。在这种情况下,由于数字是用空格分隔的,所以您也不需要使用它,您传递给phrase_parse的船长就能做到这一点。

代码语言:javascript
复制
auto result = qi::phrase_parse(first, last,
                               qi::repeat(6)[qi::double_],
                               qi::space,
                               v);

现场演示

完整的例子:

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <vector>

#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;

void parse(std::string const& s)
{
    auto first = s.cbegin(), last = s.cend();
    std::vector<double> v;

    auto result = qi::phrase_parse(first, last,
                                   qi::repeat(6)[qi::double_],
                                   qi::space,
                                   v);
    if(result) {
        if(first == last) {
            std::cout << "Success (complete)  : ";
        } else {
            std::cout << "Success (incomplete): ";
        }
        for(auto d : v) std::cout << d << ' ';
        std::cout << " Remaining: " << std::string{first, last} << '\n';

    } else {
        std::cout << "Failed\n";
    }
}

int main()
{
    parse("10 20   30 40 50       60      ");
    parse("10 20   30 40 50       60 70 80");
    parse("10 20   30 40");
}

输出:

代码语言:javascript
复制
Success (complete)  : 10 20 30 40 50 60  Remaining: 
Success (incomplete): 10 20 30 40 50 60  Remaining: 70 80
Failed
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33174547

复制
相关文章

相似问题

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