我希望能够解决这样的问题: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(); });
但是我不能在 aregex_iterator
上使用 a istream
:( 我的解决方案是先啜饮istream
然后再将其regex_iterator
碾过,但啜饮步骤似乎是多余的。
是否在某处有一个邪恶的组合istream_iterator
,regex_iterator
或者如果我想要它,我必须自己写吗?