问题:Visual C ++ 10项目(使用MFC和Boost库)。在我的一个方法中,我正在阅读简单的 test.txt 文件。
以下是文件内部(std::string
):
12 asdf789, 54,19 1000 nsfewer:22!13
然后我需要仅使用 boost 方法将所有数字转换为 int 。例如,我有一个我必须解析的不同字符列表:
( ’ ' )
( [ ], ( ), { }, ⟨ ⟩ )
( : )
( , )
( ! )
( . )
( - )
( ? )
( ‘ ’, “ ”, « » )
( ; )
( / )
在谈话之后,我必须有一些大量的int值,比如这个:
12,789,54,19,1000,22,13
也许有人已经完成了这份工作?
PS。我很擅长提升。
谢谢!
这是我的样本:
std::vector<int> v;
rule<> r = int_p[append(v)] >> *(',' >> int_p[append(v)]);
parse(data.c_str(), r, space_p);
我所要做的就是在我的代码中添加其他转义字符(,'[](){}:!
...),但是没有找到怎么做!
答案 0 :(得分:0)
但同样,正则表达式将更加强大,而且比各种原始字符串操作黑客程序更清晰。
答案 1 :(得分:0)
除了正则表达式,boost :: spirit和手动解析文本之外,您还可以将AX解析器生成器与VC ++ 2010一起使用.AX规则看起来像这样(未经测试):
std::vector<unsigned> v;
auto text_rule = *(*(axe::r_any() - axe::r_numstr()) & ~axe::r_numstr()
>> axe::e_push_back(v)) & axe::r_end();
// test it
std::string str("12 asdf789, 54,19 1000 nsfewer:22!13");
text_rule(str.begin(), str.end());
// print result
std::for_each(v.begin(), v.end(), [](unsigned i) { std::cout << i << '\n'; });
基本的想法是跳过与数字字符串规则(r_numstr
)不匹配的所有输入字符。