增强灵气 - 使用基于流的解析复制最后一个字母
Boost Spirit Qi - Duplicate last letter with stream-based parsing
这可能
非常明显,但为什么 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(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"
}
使用 XCode 5.0 和 Boost 1.54.0 进行测试。
编辑:这个问题似乎是libc++特有的。有人使用Clang护理来确认吗?
如果我理解正确,你不应该使用输入迭代器,因为它们可能会给回溯带来问题。也许这只是纯粹的运气/实现的差异,这有时根本有效。
相关文章:
- lower_bound()返回最后一个元素
- 获取向量C++中第一个值和最后一个值的和
- 获取用C/C++打印的最后一个字符串
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 为什么我的最后一个 ELSE 条件无法正确执行
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 仅显示链表的最后一个元素
- 测试迭代器是否位于列表中的最后一个
- push_back通过自行创建的对象获取最后一个元素的向量
- 使用 map.end() 访问 map 的最后一个元素
- 如何知道地图中的最后一个元素是否被删除?
- std::矢量保存 只推送最后一个元素
- 反转后不返回最后一个元素
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 阵列操作,复制最后一个元素
- 写入文件会复制最后一个条目
- 获取字符串流中的最后一个字符,而不复制其整个缓冲区
- 增强灵气 - 使用基于流的解析复制最后一个字母