如何确定提取了多少个字符`std::getline()`?
How to determine how many characters `std::getline()` extracted?
假设我使用 std::getline()
overload. How to determine how many characters extracted from the stream? std::istream::gcount()
does not work as discussed here: ifstream gcount returns 0 on getline string overload
从 std::istream
中读取了 std::string
#include <iostream>
#include <sstream>
#include <string>
int main()
{
std::istringstream s( "hello world\n" );
std::string str;
std::getline( s, str );
std::cout << "extracted " << s.gcount() << " characters" << std::endl;
}
请注意,对于反对者 - 字符串的长度不是答案,因为 std::getline()
可能会也可能不会从流中提取额外的字符。
这样做似乎并不完全简单,因为 std::getline
可能(或可能不会)读取终止分隔符,并且在任何一种情况下都不会将其放入字符串中。所以字符串的长度不足以告诉你到底读取了多少个字符。
您可以测试 eof()
以查看分隔符是否被读取:
std::getline(is, line);
auto n = line.size() + !is.eof();
最好将其包装在一个函数中,但是如何传回额外的信息?
我想的一种方法是在读取定界符后将其添加回去并让调用者处理它:
std::istream& getline(std::istream& is, std::string& line, char delim = '\n')
{
if(std::getline(is, line, delim) && !is.eof())
line.push_back(delim); // add the delimiter if it was in the stream
return is;
}
但我不确定我是否会一直想要那个。
假设我使用 std::getline()
overload. How to determine how many characters extracted from the stream? std::istream::gcount()
does not work as discussed here: ifstream gcount returns 0 on getline string overload
std::istream
中读取了 std::string
#include <iostream>
#include <sstream>
#include <string>
int main()
{
std::istringstream s( "hello world\n" );
std::string str;
std::getline( s, str );
std::cout << "extracted " << s.gcount() << " characters" << std::endl;
}
请注意,对于反对者 - 字符串的长度不是答案,因为 std::getline()
可能会也可能不会从流中提取额外的字符。
这样做似乎并不完全简单,因为 std::getline
可能(或可能不会)读取终止分隔符,并且在任何一种情况下都不会将其放入字符串中。所以字符串的长度不足以告诉你到底读取了多少个字符。
您可以测试 eof()
以查看分隔符是否被读取:
std::getline(is, line);
auto n = line.size() + !is.eof();
最好将其包装在一个函数中,但是如何传回额外的信息?
我想的一种方法是在读取定界符后将其添加回去并让调用者处理它:
std::istream& getline(std::istream& is, std::string& line, char delim = '\n')
{
if(std::getline(is, line, delim) && !is.eof())
line.push_back(delim); // add the delimiter if it was in the stream
return is;
}
但我不确定我是否会一直想要那个。