从格式化输入操作中获取读取字符数
Get amount of read characters from formatted input operation
我正在使用>>
运算符重载从istream
读取数字。这工作正常,但现在我需要知道该操作消耗了多少个字符。我目前正在使用类似的东西
int startPos = in.tellg();
double number;
in >> number;
int readChars = in.tellg() - startPos;
这在某些情况下确实有效,但它非常脆弱。当使用std::cin
作为in
时,这根本不起作用(我认为这是因为std::cin
在流中没有位置,它可能是无穷无尽的(。
我的问题(我认为(相当简单:使用>>
运算符时如何获取已读取的字符数?
在我的搜索过程中,我遇到了gcount((,但这仅适用于未格式化的输入。>>
运算符的文档似乎也没有对此给出提示:http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/
如果流被格式化,你不能只检查它的长度吗?
安利,std::istream::operator>>
C++ 98:
该函数被视为执行格式化输入:在内部,该函数通过首先构造哨兵对象(noskipws 设置为 false(来访问输入序列。然后(如果很好(,它从其关联的流缓冲区对象中提取字符,就像调用其成员函数 sbumpc 或 sgetc 一样,最后在返回之前销毁哨兵对象。
对于C++ 11:
该函数被视为执行无格式输入:在内部,该函数通过首先构造哨兵对象(noskipws 设置为 true(来访问输入序列。然后(如果很好(,它从其关联的流缓冲区对象中提取字符,就像调用其成员函数 sbumpc 或 sgetc 一样,最后在返回之前销毁哨兵对象。此函数成功读取和存储的字符数可以通过调用成员 gcount 来访问。
因此,您似乎只能计算未格式化输入中的字符数。
但:
修改此函数返回的值(
gcount()
(的无格式输入操作是:get,getline,ignore,peek,readsome,putback和unget。但请注意,peek、putback 和 unget 实际上并没有提取任何字符,因此 gcount 在调用其中任何一个字符后将始终返回零。
因此,例如,也许您可以使用istream& getline (istream& is, string& str);
或std::istream::get
来gcount()
计算格式化的流,
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 从矢量C++读取字符时出现问题
- 从格式化输入操作中获取读取字符数
- 使用 cin.get 读取字符数组
- 按下回车键时,如何使数组停止读取字符
- C++:读取字符是不正确的
- 如何从输入文件中读取字符并将其存储到向量中?
- 线程函数无法从堆上分配的缓冲区中读取字符
- 使用 cin.get() 读取字符
- C++:使用 fgets() 读取字符输入时出错
- C++ 从文件中读取字符,计算每个字符并进行排序
- C ++ ifstream 无法读取字符串,并且在读取字符时出错
- 逐字读取字符数组,无需字符串函数
- 是否有任何方法可以在用户输入文本时读取字符
- 从字符串中读取字符时出错
- 如何按字符从文件到2D数组读取字符
- 重载>>运算符和读取字符
- 从堆栈中读取字符后,如何修复不正确的文件输出
- 如何从文件中读取“”字符
- 读取字符 * 始终具有相同的地址