从文件输入不同类型的数据而不使用矢量

时间:2016-07-09 16:47:56

标签: c++ arrays database input

首先,我是C ++的新手,所以不要因为不知道或不正确而标记我。我有一个文件,我试图读入我的C ++程序。我正在为一个项目做练习。我必须创建和对象,并且每个实例表示将文件的一行与七个变量相加。该文件包含一个数据库。文本文件的格式为:

// String String Character Int Int Char Int 
// String String Character Int Int Char Int
// etc. 

正好有350个数据成员。永远不会有更多。所以我正在使用数组。 我无法使用此项目的向量,因为它未指定。

仅使用数组来解决此问题的最佳方法是什么?

我的第一次尝试是创建一个3阵列:

        for (int l = 0; l < max_size; l++) {
            myfile >> myintarray[l];
        }
        for (int k = 0; k < max_size; k++) {
            myfile >> mychararray[k];
        }
       for (int i = 0; i < max_size; i++) {
            myfile >> myarray[i];
            // print artists and title; 
        }

       // Then I have to put it the object. Store as such....
        myloop = 0;
        a = 2;
        b = 5;
        while (myloop < 50) {
            myartwork[myloop].setRoom(mychararray[b]);
            myartwork[myloop].myart.setMeduim(mychararray[a]);
            a += 7;
            b += 7;
            myloop += 1;
        }
       // more code where I do the same thing with characters
       // same things with strings.....

当我尝试它时,它打印出内容。它是inccorect。和mumbo jumbo。 所以我认为这是因为我在尝试存储所有数字数组时它不能占用字符并打印出错误?我不确定这是否正确。

然后我尝试只使用一个字符串数组,然后将每个字符串转换为char或int类型。这是一个痛苦,我得到一个错误。我不知道如何处理字符类型。

            myloop = 0;
            a = 3;
            b = 4;
            c = 6;
            while (myloop < 50) {
                //std::stoi (str_dec,&sz)
                std::string::size_type sz;

                // my object ( instance). data......Try to convert this. 
                myartwork[myloop].mymysize.setLength(std::stoi(myarray[a],  &sz));
                myartwork[myloop].mymysize.setWidth(std::stoi(myarray[b], &sz));
                myartwork[myloop].setPrice(std::stoi(myarray[c], &sz));
                a += 7;
                b += 7;
                c += 7;
                myloop += 1;
            }

这两种方法有更好的方法吗?我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:0)

使用具有相同容量的许多阵列通常表明设计不佳。

让我们来谈谈这里的建模。让我们将记录定义为字段的容器。该记录将与文件中的一个文本行对应。所以,模仿它:

struct Record
{
    std::string s1;
    std::string s2;
    char        c1;
    int         i1;
    int         i2;
    char        c1;
    int         i3;
};

现在您可以声明一个表或一个数组的记录:

#define MAXIMUM_RECORDS (350)
Record database[MAXIMUM_RECORDS];

还有一些事情要做:

  1. 重载operator >>以从输入文件中读取。
  2. 实现构造函数,复制构造函数和赋值运算符。
  3. 重载比较运算符:==>
  4. 重载operator <<以打印记录。