将文件读入对象数组C ++

时间:2013-03-20 20:48:05

标签: c++ arrays object

我必须从一个格式如此

的数据文件中读取

abcd(string)1(int)2(int)3(int)
abcde(string)4(int)3(int)2(int)


我想执行一些仅在同一行中使用变量的函数。但这是我的代码。我是初学者所以请指正,谢谢。

<。>文件中的

#include <string>
using namespace std;


#ifndef CALC_H  
#define CALC_H


class Calc  
{  
public:

    void readFile(string file);

private:

    string name;
    int a;
    int b;
    int c;
};

#endif

在实施文件中

 #include "Vehicle.h"  
 #include iostream>  
 #include fstream>  
 #include string>  
 #include cstdlib>  
 #include cmath>  

 using namespace std;


void Vehicle::readFile(string filename)  
{  
   ifstream myIn;  

 int totalNum=0;  

myIn.open(filename.c_str());
if (!myIn)
{
    cerr<<"Data file failed to open!\n";
    exit (0);
}   
for (int i=0; i<MAX; i++)
{
    while (myIn.peek() != EOF)
    {
        myIn>>calc[i].name;
        myIn>>calc[i].a;
        myIn>>calc[i].b;
        myIn>>calc[i].c;

        totalNum++;
    }
}
myIN.close();

然后我想显示我刚刚从文件中读取的内容

 for (int i = 0; i < MAX; i++)  
 cout << calc[i].name << calc[i].a << calc[i].b << calc[i].c << endl;
抱歉,如果我走在正确的道路上,我只想知道很多我想知道的事情。感谢

2 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是为您的班级>>重载Calc运算符。

class Calc {
   public:
      friend istream& operator >>(istream& myIn, Calc& calc);
};

istream& operator >>(istream& myIn, Calc& calc) {
    myIn >> calc.name;
    myIn >> calc.a;
    myIn >> calc.b;
    myIn >> calc.c;

    return myIn;     
}

现在你可以这样做:

while (myIn >> calc[i]) {
    ++totalNum;
}

答案 1 :(得分:0)

你应该考虑设计它有点不同。

创建一个包含一行的类,即字符串int int int - 就像你在“Calc”中拥有它一样,但不依赖于你如何创建一行(readfile)。让我们称之为“线”

class Line
{
public:
  std::string name;
  int a;
  int b;
  int c;  
};

既然你需要阅读几行,你需要某种容器来容纳它们,创建一个Line(或其他容器)的矢量

std::vector<Line> contents;

然后覆盖流操作符,如Tushar建议的那样,当您从文件(或从例如stdin)读取时,您可以为您读取的每一行创建Line实例,这些实例用于填充'contents'数组

现在你可以开始做你想做的任何事情,即实际操作calc