如何将ifstream转换为istringstream

时间:2016-02-16 03:07:45

标签: c++ fstream istringstream

我有一个函数可以读取free()并对其进行一些操作所以...我试图使用istringstream读取文件并将fstream对象转换为fstream以便将其传递给我的函数。我不知道该怎么做。任何帮助将非常感激。我仍然是一个初学者,所以如果可以,请保持简单。

istringstream

4 个答案:

答案 0 :(得分:1)

你想要的是std::istream_iterator

std::string myString ( std::istream_iterator(inputFile) , std::istream_iterator() ) ;
std::istringstream is ( myString ) ;

通过使用begin iterator(std::istream_iterator(inputFile))和end iterator(std::istream_iterator())创建一个包含inputFile内容的字符串。然后它从该字符串创建一个istringstream。

这解决了您当前的问题,但几乎可以肯定有更好的方法来做您想做的事情。例如:

  • 传递istream而不是istringstream(因为您不必复制它)。

  • 将您的算法更改为不需要istringstream

答案 1 :(得分:1)

您无法将std::ifstream直接转换为std::istringstream

但是,使用std::istringstream的功能只需重新编写即可使用std::istream,以便可以与std::istringstreamstd::ifstream一起使用。< / p>

如果你真的想要一个std::ifstream并获得一个std::istringstream,你应该使用std :: istreambuf_iterator来构造一个临时的std::string,这是唯一一个参数类型。 std::istringstream接受。但那个糟糕的设计。使用std::istream,直接传递std::ifstream

答案 2 :(得分:0)

Stringstream无法从文件中获取,它只能从字符串中取出并发出一个字符串。 使用getline / etc创建一个字符串来保存文件中的信息,然后将其输入stringstream。还要确保在使用它之后清除stringstream。 Stringstreamname.clear()。

答案 3 :(得分:0)

不确定你需要做什么,但超出了你的直接问题,我敢打赌你想在同一时间阅读,即使你还不知道。

在C ++中,如果您阅读任何不适合的内容,输入就会被卡住。&#34; 例如,假设输入错误:

4 4x

x是一个错字。

如果您阅读它:

int a,b;
cin >> a >> b;

a和b都是4.但是下次你读,它会因为x而失败。

相反,请将每行读入字符串:

#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;

int main() {
    ifstream f("input.dat");
    string line;

    getline(f, line);
    istringstream s(line);
    int a,b;
    s >> a >> b;
    cout << (a + b) << '\n';
}

当然,正如其他人所说,你应该根据istream的读取来编写代码,而不管它来自何处。