我只看到你直接错过的是
ss.fail()
bool(stream)
!stream.fail()
,
不
stream.good()
)如预期,
ss.eof()
然而,在实际发生的事情上可能会有一些混乱。因为
getline公司
使用
结束
德利姆
-
字段,输入数据,例如
"a\nb\n"
有两个而不是三个字段,这可能令人惊讶。对于行来说,这是完全有意义的(而且是POSIX标准的),但是有多少字段
德利姆
属于
'-'
"a-b-"
顺便说一句,我是这样想的
write
split
:
template<class OutIter>
OutIter split(std::string const& s, char delim, OutIter dest) {
std::string::size_type begin = 0, end;
while ((end = s.find(delim, begin)) != s.npos) {
*dest++ = s.substr(begin, end - begin);
begin = end + 1;
}
*dest++ = s.substr(begin);
return dest;
}
deque<string> c;
split("a-b-", '-', back_inserter(c));
// c == {"a", "b", ""}