std :: getline:分隔字符与字符数

时间:2013-02-16 21:05:55

标签: c++ istream

成员函数istream& istream::getline(char* s, streamsize n, char delim);使您能够从流中提取字符,直到发生以下三种情况之一:

  1. 找到指定的分隔符,
  2. 从流中读取
  3. n - 1个字符,或
  4. 发生EOF或错误
  5. 显然,条件3(发生错误)很容易被发现。但是呼叫者如何区分条件(1)和(2)?你怎么知道是否有划界角色?可能会读取n - 1个字符,但找不到分隔字符。

3 个答案:

答案 0 :(得分:3)

根据http://en.cppreference.com/w/cpp/io/basic_istream/getline

在情况3中,setstate(eofbit)将被执行。

在情况2中,setstate(failbit)将被执行。

答案 1 :(得分:1)

你可以解开这个问题。使用getline(std::basic_istream&, std::basic_string&, Elem delim);。或者如果你使用的是C ++ 11,那就是getline(std::basic_istream&&, std::basic_string&, Elem delim);。也就是说,读入std::string。如果这样做,则不必处理数组大小。

答案 2 :(得分:0)

您可以使用std::istream::gcount()了解读取的字符数,并将其与n进行比较,以找出问题的答案。此外,可以搜索输出缓冲区以找出delim。