C++ 如何将ifstream转换为istringstream
我有一个函数,可以读取C++ 如何将ifstream转换为istringstream,c++,fstream,istringstream,C++,Fstream,Istringstream,我有一个函数,可以读取istringstream,并对其执行一些操作,因此。。。我正在尝试使用fstream读取文件,并将fstream对象转换为istringstream,以便将其传递给我的函数。我不知道怎么做。任何帮助都将不胜感激。我还是一个初学者,所以如果可以的话,请保持简单 string inputFile(argv[1]); ifstream inFile(inputFile.c_str()); istringstream is; is >> inFile
istringstream
,并对其执行一些操作,因此。。。我正在尝试使用fstream
读取文件,并将fstream
对象转换为istringstream
,以便将其传递给我的函数。我不知道怎么做。任何帮助都将不胜感激。我还是一个初学者,所以如果可以的话,请保持简单
string inputFile(argv[1]);
ifstream inFile(inputFile.c_str());
istringstream is;
is >> inFile.rdbuf(); //*******This is wrong and is what I'm having trouble with
function(is);
您需要的是
std::istream\u迭代器
:
std::string myString ( std::istream_iterator(inputFile) , std::istream_iterator() ) ;
std::istringstream is ( myString ) ;
这将通过使用开始迭代器(std::istream\u迭代器(inputFile)
)和结束迭代器(std::istream\u迭代器()
)创建包含inputFile内容的字符串。然后,它从该字符串创建一个istringstream
这就解决了你眼前的问题,但几乎可以肯定有更好的方法来做你想做的事情。例如:
- 传递
而不是istream
(因为这样你就不必复制它)istringstream
- 将算法更改为不需要
istringstream
std::ifstream
直接转换为std::istringstream
但是,使用std::istringstream
的函数只需重写为使用std::isttream
,这样它就可以与std::istringstream
和std::ifstream
一起使用
如果您确实想要获取一个
std::ifstream
,并获取一个std::istringstream
,那么应该使用std::istreambuf\u迭代器来构造一个临时的std::string
,这是std::istringstream
接受的唯一参数类型。但那是个糟糕的设计。使用std::istream
,并直接传递std::ifstream
。Stringstream不能从文件中获取,它只能从字符串中获取并发送给字符串。
使用getline/etc生成一个字符串来保存文件中的信息,然后将其馈送到stringstream中。另外,请确保在使用stringstream后清除stringstream,例如Stringstreamname.clear()。不确定您到底需要做什么,但除了您直接提出的问题之外,我敢打赌,您每次都想读一行,即使您还不知道 在C++中,如果你读的任何不适合的东西,输入就会被“卡住”。 例如,假设输入错误: 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';
}
#包括
#包括
#包括
使用名称空间std;
int main(){
iff流(“input.dat”);
弦线;
getline(f,line);
IstringStreams(线);
INTA,b;
s>>a>>b;
cout看起来是学习多态性的好机会。