C++ 如何仅在以给定数量的整数开始时解析字符串

C++ 如何仅在以给定数量的整数开始时解析字符串,c++,parsing,boost-spirit,C++,Parsing,Boost Spirit,给定输入字符串“12a”或“a123”,我期望“false”、“123a”->true和result==“a”、“123ab”->true和result==“ab”等 以下是我的尝试: #include <boost/spirit/include/qi.hpp> #include <string> #include <iostream> int main(int argc, char* argv[]) { std::string s(argv[1])

给定输入字符串“12a”或“a123”,我期望“false”、“123a”->true和result==“a”、“123ab”->true和result==“ab”等

以下是我的尝试:

#include <boost/spirit/include/qi.hpp>
#include <string>
#include <iostream>

int main(int argc, char* argv[])
{
    std::string s(argv[1]) ;
    int n = 3;//can be runtime parameter
    std::string result;
    auto expr = boost::spirit::qi::omit
        [
            boost::spirit::qi::repeat(n)[boost::spirit::qi::int_] 
        ]   
        >> +boost::spirit::qi::char_("A-Za-z");

    bool b = boost::spirit::qi::phrase_parse(s.begin(), s.end(), expr, boost::spirit::qi::space, result);
    std::cout << std::boolalpha << b << '\n';
    if(b)
    {
        std::cout << result << '\n';
    }
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
std::字符串s(argv[1]);
int n=3;//可以是运行时参数
std::字符串结果;
auto expr=boost::spirit::qi::省略
[
boost::spirit::qi::重复(n)[boost::spirit::qi::int]
]   
>>精神,精神,精神,精神;
bool b=boost::spirit::qi::短语解析(s.begin(),s.end(),expr,boost::spirit::qi::space,result);

std::cout
boost::spirit::qi::int
是一个贪婪的解析器,在第一次重复时将消耗所有三位数字

相反,您应该定义自己的整数解析器,该解析器只使用1位数字,如下所示:

boost::spirit::qi::uint_parser<unsigned, 10, 1, 1> uint1_p;
boost::spirit::qi::uint\u解析器uint1\u p;
并使用
uint1\u p
而不是
boost::spirit::qi::int


编辑:或者,是的……
qi::digit
在这里做同样的事情。

qi::digit
似乎更简单。:-p