C++ 如何仅在以给定数量的整数开始时解析字符串
给定输入字符串“12a”或“a123”,我期望“false”、“123a”->true和result==“a”、“123ab”->true和result==“ab”等 以下是我的尝试: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])
#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::coutboost::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