std::getline:分隔字符与字符计数
std::getline: delimiting character vs. character count
成员函数istream& istream::getline(char* s, streamsize n, char delim);
使您能够从流中提取字符,直到发生以下三种情况之一:
- 找到指定的定界字符
- 从流中读取
n - 1
个字符,或者 - 发生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。
相关文章:
- 在Arduino中将字符串转换为(逗号分隔的十六进制)字符串到无符号字符数组
- 获取带有字符 X 的输入 X/X/etc 并用斜杠 / 分隔它
- 使用 fstream 在空格分隔文件中查看下一项(不仅仅是一个字符)的方法
- C++:使用't'分隔符分隔字符*
- 用字符分隔数字
- 如何获得一些用空格分隔的字符
- 如果字符串中没有空格,如何解析带有数字和字符的字符串并分隔数字和字符
- 如何在 c++ 中读取带有分隔字符的用户输入,同时保留空格作为输入
- 如何使键盘输入变成一个数组,用字符分隔
- 递增由不同分隔符分隔的字符数组中的数字
- 将文本文件读取为用不同字符分隔的C++值
- 分隔字符串的最佳ASCII字符是什么
- 在C++中打印用新行分隔的6,5,4,3,2个字符
- 从字符串中读取多个数据,使用sstream以字符分隔
- 在无符号字符数组中读取充满字符串(用换行符分隔)的文件(反之亦然)的最快方法是什么?
- 如何从C++中字段由'|'字符分隔的行中提取数据?
- C从竖线字符分隔的文件中读取
- std::getline:分隔字符与字符计数
- 将";"分隔的文件读入字符数组结构
- 如何创建一个字符串数组来拆分字符,其中单词由" "分隔?C++