【发布时间】:2015-07-05 21:25:55
【问题描述】:
我希望能够解决这样的问题:Getting std :: ifstream to handle LF, CR, and CRLF? 其中istream 需要用复杂的分隔符进行标记;这样标记istream 的唯一方法是:
- 在
istream中一次读取一个字符 - 收集人物
- 当分隔符被击中时,将集合作为标记返回
正则表达式非常擅长用复杂的分隔符标记字符串:
string foo{ "A\nB\rC\n\r" };
vector<string> bar;
// This puts {"A", "B", "C"} into bar
transform(sregex_iterator(foo.cbegin(), foo.cend(), regex("(.*)(?:\n\r?|\r)")), sregex_iterator(), back_inserter(bar), [](const smatch& i){ return i[1].str(); });
但我不能在istream 上使用regex_iterator :( 我的解决方案是先吃istream,然后在上面运行regex_iterator,但吃这一步似乎是多余的。
在某处是否存在 istream_iterator 和 regex_iterator 的邪恶组合,或者如果我想要它,我必须自己编写吗?
【问题讨论】:
标签: c++ regex iterator istream istream-iterator