1

我正在尝试使用 Boost Spirit将字符串转换"ABC10DEF20"为数组。["ABC", 10, "DEF", 20]我不确定“未定界”是否是正确的术语,但我想通过整数和非整数的边界来分解它,而不是用空格或其他定界字符来分割它。

我想出了如下代码:

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 ]按预期得到的输入。

4

1 回答 1

2

从输出中,很明显您正在匹配单个字符,而不是字符串和完整的无符号整数。

不确定它会修复它,但请尝试:

bool r = parse(iter, last,
               +(+(+char_ - digit)|uint_),
               v);

(注意前面添加的+char_

的类型v可能需要更改为: std::vector<boost::variant<std::vector<char>, unsigned int> > v;,并且您可能需要修复结果。对Boost Spirit不太熟悉;我敢打赌,有更好、更清洁的方法。

最终解决方案:

修改解析表达式以使用:

+(as_string[+(char_ - digit)]|uint_)
于 2014-01-31T01:33:05.703 回答