我想知道是否有一种C ++方式打开文件并逐行读取输入。
我遇到了以下代码来完成任务:
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ifstream myfile;
myfile.open ("example.txt");
return 0;
}
我鼓励不要使用任何C函数或命令。
问题是,我的“example.txt”是一个字符串的形式,并且使用str.c_str()是一个C函数,所以我想我有两种方法可以解决这个问题。
还有另一种方法可以逐行读取文件中的输入吗?也许使用一些接受字符串作为文件路径参数的东西?有没有C ++的做事方式? :)
或者,是否有另一种方法将字符串转换为const char *,这是myfile.open()函数需要的?
非常感谢提前!
编辑:我缺乏实践和研究使我认为c_str()是一个C函数,而事实并非如此。我很抱歉。既然不是我找到了答案。答案 0 :(得分:5)
C ++ 11的fstream
构造函数接受string
。在大多数情况下,您希望使用fstream
的构造函数而不是.open()
- 您可以保存一行和一个函数调用。
要逐行阅读文件,您应该使用std::getline()
。
另请注意,string::c_str()
仍然是C ++函数,而不是C 1,以及fstream
的构造函数const char *
。大多数(如果不是全部,我不是100%肯定)C标准库函数也包含在C ++标准中。
答案 1 :(得分:0)
由于关于str.c_str()的问题已经得到解答,我只想补充一点逐行获取输入。例如,您想要每行输入2个输入,提取它们并将其放入向量中。
fstream fs(filename.c_str(), ios_base::in);
string line;
stringstream ss;
int a,b;
vector<int> d;
int numlines;
int i;
for (i = 0; getline(fs, line); i++) {
for (ss.str(line); ss >> a >> b; d.push_back(a), d.push_back(b)) {}
ss.clear();
}
numlines = i;
希望您能够使用getline()
和fstream()
答案 2 :(得分:-3)
它看起来非常相似。您需要一个ifstream
而不是ofstream
,您需要>>
运算符,并假设您的文件有多行,您就可以了需要一个循环和ifstream::feof()
函数。