-4

我想知道是否有打开文件并逐行读取输入的 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 函数,但事实并非如此。我很抱歉。因为不是,所以我找到了答案。

4

3 回答 3

5

C++11 的fstream构造函数接受string. 在大多数情况下,您希望使用fstream' 构造函数,而不是.open()- 您保存一行和一个函数调用。

要逐行读取文件,您应该使用std::getline().

另请注意,string::c_str()仍然是 C++ 函数,而不是 C 函数,以及fstream' 构造函数采用const char *. 大多数(如果不是全部,我不是 100% 肯定)C 标准库函数也包含在 C++ 标准中。

于 2012-06-09T16:44:00.983 回答
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()

于 2012-06-09T17:02:09.997 回答
-3

它看起来会非常相似。您将需要 anifstream而不是ofstream,您将需要>>运算符,并且假设您的文件有不止一行,您将需要一个循环和ifstream::feof()函数。

于 2012-06-09T16:46:21.130 回答