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

std::getline: delimiting character vs. character count

本文关键字:字符 分隔 getline std      更新时间:2023-10-16

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

  1. 找到指定的定界字符
  2. 从流中读取n - 1个字符,或者
  3. 发生EOF或错误

显然,条件3(发生错误)很容易检测到。但是呼叫者如何区分条件(1)和(2)呢?你如何判断一个分隔字符是不是?可能读取了n - 1字符,但未找到分隔字符。

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

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

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

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

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