C++ Boost Spirit Qi-使用基于流的解析复制最后一个字母
这可能非常明显,但为什么boost中基于流的解析会重复最后一个字母?我一定是做错了什么事:C++ Boost Spirit Qi-使用基于流的解析复制最后一个字母,c++,boost,boost-spirit,libc++,C++,Boost,Boost Spirit,Libc++,这可能非常明显,但为什么boost中基于流的解析会重复最后一个字母?我一定是做错了什么事: #include <iostream> #include <sstream> #include <boost/spirit/include/qi.hpp> namespace qi = boost::spirit::qi; int main() { std::string input = "hello"; std::stringstream ss(
#include <iostream>
#include <sstream>
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
int main() {
std::string input = "hello";
std::stringstream ss(input);
std::string r1, r2;
boost::spirit::istream_iterator first(ss), last;
qi::phrase_parse(input.begin(), input.end(), qi::lexeme[qi::alpha >> *qi::alnum], qi::space, r1);
std::cout << r1 << std::endl; // prints "hello"
qi::phrase_parse(first, last, qi::lexeme[qi::alpha >> *qi::alnum], qi::space, r2);
std::cout << r2 << std::endl; // prints "helloo"
}
#包括
#包括
#包括
名称空间qi=boost::spirit::qi;
int main(){
std::string input=“hello”;
std::stringstream ss(输入);
std::字符串r1,r2;
boost::spirit::istream_迭代器第一(ss),最后;
qi::phrase_parse(input.begin(),input.end(),qi::lexeme[qi::alpha>>*qi::alnum],qi::space,r1);
std::cout*qi::alnum],qi::space,r2);
std::cout如果我理解正确的话,因为它们可能会给回溯带来问题。也许这只是运气好/实现上的差异,有时会奏效。您的代码会打印两次“hello”在我的系统上,Mingw,GCC 4.8-1,提高了4.4.0,谢谢你的测试。我会尝试其他几种配置……好吧,这取决于我是否选择了LBC++(不正确的输出)或LIbSTDC++ +(正确的输出)。这很奇怪…非常有趣。优秀的重放器。列表Visual Studio 2013 RC也没有问题。它必须特定于clang/libc++,否则我的系统中的某些东西确实不可靠。我已经发布到邮件列表中,希望其他人可以测试它……很好,但该示例已经使用了一个boost::spirit::istream_迭代器
,根据我的理解应该是工作。看这里:。@kloffy:你说得对,我完全忽略了它之前的boost::spirit::。