首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ifstream转换为istringstream

如何将ifstream转换为istringstream
EN

Stack Overflow用户
提问于 2016-02-16 03:07:44
回答 4查看 5.1K关注 0票数 4

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

代码语言:javascript
复制
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);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-16 03:16:25

你想要的是std::istream_iterator

代码语言:javascript
复制
std::string myString ( std::istream_iterator(inputFile) , std::istream_iterator() ) ;
std::istringstream is ( myString ) ;

这通过使用begin迭代器( inputFile )和结束迭代器(std::istream_iterator())创建一个包含std::istream_iterator(inputFile)内容的字符串。然后,它从该字符串创建一个string。

这解决了你眼前的问题,但是几乎可以肯定有一个更好的方法来完成你想要做的事情。例如:

  • 传递一个istream而不是一个istringstream (因为这样您就不必复制它)。
  • 将算法更改为不需要istringstream
票数 1
EN

Stack Overflow用户

发布于 2016-02-16 03:16:36

不能将std::ifstream直接转换为std::istringstream

但是,使用std::istringstream的函数应该被重写为使用std::istream,这样它就可以同时与std::istringstreamstd::ifstream一起使用。

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

票数 2
EN

Stack Overflow用户

发布于 2016-02-16 03:18:15

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35422961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档