1
我试图使用Boost Spirit将"ABC10DEF20"
这样的字符串转换为数组["ABC", 10, "DEF", 20]
。我不确定“unde undefined”是否是正确的术语,但是我想将它分解为整数和非整数的边界,而不是用空格或另一个分隔字符来分割它。使用Boost Spirit提取无限的字符串和整数
我已经想出了类似的代码:
std::string search_str = "ABC10DEF20";
std::vector<boost::variant<std::string, unsigned int> > v;
std::string::const_iterator iter = search_str.begin();
std::string::const_iterator last = search_str.end();
bool r = parse(iter, last,
+(+(char_ - digit)|uint_),
v);
对于输入"ABC10DEF20"
这导致[ 65, 66, 67, 10, 68, 69, 70, 20 ]
(无串,仅仅是整数,并存储在整数部分字符串的ASCII组件)。对于输入"10"
,我按照预期得到[ 10 ]
。
制作规则变化导致'[65,66,67,49,48,68,69,70, 50,48]'所以它实际上更糟糕,因为现在即使整数都以ASCII字符形式出现。 – eco
另外,+ char_应该转换为std :: string就好了。 Boost Spirit文档多次执行此操作。 – eco
如果您优先考虑'数字'会怎么样?即'数字 - + char_'? –