我有一个函数可以读取free()
并对其进行一些操作所以...我试图使用istringstream
读取文件并将fstream
对象转换为fstream
以便将其传递给我的函数。我不知道该怎么做。任何帮助将非常感激。我仍然是一个初学者,所以如果可以,请保持简单。
istringstream
答案 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::istringstream
和std::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的读取来编写代码,而不管它来自何处。