我们说我们有一个类似的文件:
1 2
3 4 5
6 7 8
通常我们会做一个getline(),然后使用字符串流来解析行内部。然而,getline返回一个我们创建字符串流的字符串。 是否有可能在字符串流中获取文件的全部内容然后解析标记,同时知道行尾的位置?
答案 0 :(得分:1)
将整个文件放入std::string
并将其放入std::istringstream
并阅读它似乎没什么意义:您可以直接从std::ifstream
读取。如果您真的想要将文件放入std::string
,可以使用以下几种方法:
std::string s0{ std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>() };
std::string s1( (std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>() );
std::ostringstream out; out << in.rdbuf(); std::string s2 = out.str();
显然,您只需使用其中一种方法,因为每种方法都会使用输入流in
。在std::string
中存储文件后,您可以从中构建std::istringstream
。
我认为你也可以使用
std::stringstream stream;
stream << in.rdbuf();
stream.seekg(std::ios_base::beg, 0);
首先避免将内容读入std::string
。