如何将 ifstream 转换为 istringstream
how to convert ifstream to istringstream
我有一个函数可以读取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::ifstream
直接转换为std::istringstream
。
但是,使用std::istringstream
的函数应该简单地重写为使用 std::istream
,以便它可以与 std::istringstream
和 std::ifstream
一起使用。
如果你真的想取一个std::ifstream
,并得到一个std::istringstream
,你应该使用 std::istreambuf_iterator 来构造一个临时std::string
,这是std::istringstream
接受的唯一参数类型。但这是糟糕的设计。使用std::istream
,直接传递std::ifstream
。
你想要的是std::istream_iterator
:
std::string myString ( std::istream_iterator(inputFile) , std::istream_iterator() ) ;
std::istringstream is ( myString ) ;
这将通过使用开始迭代器 ( std::istream_iterator(inputFile)
( 和结束迭代器 (std::istream_iterator()
( 创建一个包含 inputFile 内容的字符串。然后,它从该字符串创建一个字符串流。
这解决了你眼前的问题,但几乎可以肯定有更好的方法来做你想做的事情。例如:
传递
istream
而不是istringstream
(因为这样您就不必复制它(。将您的算法更改为不需要
istringstream
。
字符串流不能从文件中获取,它只能从字符串中获取并提供给字符串。创建一个字符串来保存文件中的信息,使用 getline/etc 然后将其馈送到字符串流中。还要确保在使用字符串流后清除字符串流,例如 Stringstreamname.clear((。
不确定你需要做什么,但除了你的直接问题之外,我敢打赌,即使你还不知道,你也想一次阅读一行。
在C++中,如果你读到任何不适合的东西,输入就会"卡住"。例如,假设输入错误:
44 倍
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读取代码来编写代码,而不管它来自哪里。
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 如何避免在转换字符串令牌流时重复istringstream构造
- 如何将 ifstream 转换为 istringstream
- 为什么在成功将布尔字符串值转换为布尔值时,istringstream eof 标志没有变为真?
- 如何从const unsigned char*初始化std::istringstream,无需强制转换或复制