【问题标题】:C++ File to VectorC++ 文件到向量
【发布时间】:2017-09-07 02:56:26
【问题描述】:

我有一个如下所示的文件:

C 0484758654 95
C 0428473483 121
T 0494569848
C 0494569848 121
//.. 30 or so more entries 

我想将每个“人”(由他们的电话号码表示)存储到一个对象中。我知道我需要一个结构来存储它,所以我使用了 Vector:

 using namespace std;
    int main()
    {
        ifstream fin;
        fin.open("test.txt");
        vector<MonthlyPhoneBill> bill;
        MonthlyPhoneBill temp;
        while (fin >> temp.code>> temp.phoneNumber >> temp.data)
            {
                bill.push_back(temp);
            }

        for (const auto& temp : bill) {
        cout << temp.code << ' ' << temp.phoneNumber << ' ' << temp.data << endl;
    }
        return 0;
    }

类:

class MonthlyPhoneBill {

public:
    MonthlyPhoneBill();
    int data;
    int phoneNumber;
    std::string code;
    int totalBill;
};

但是我有几个问题,第一个问题是当我打印文件内容时它只打印第一行。

我的第二个问题是我不知道如何操作数据,因为它存储在向量中。例如,我想为每个人计算账单。我不确定如何访问向量的内容并进行相应的计算。从文件中,一个人可能会多次出现,我不确定每次出现时如何添加总成本。

【问题讨论】:

  • 我很确定您的代码只打印前两行,而不是文件中的第一行。继续查看文件,并尝试找出第三行的不同之处,然后记住这句格言:“计算机只做你告诉它做的事情,而不是你想让它做的事情”。记住这句座右铭后,问问自己:就阅读每一行而言,你告诉你的电脑做什么?现在,就访问向量的内容而言,这已在您的 C++ 书中进行了充分解释。您的 C++ 书中是否有您不清楚的具体内容?

标签: c++ file object vector


【解决方案1】:
struct MonthPhoneBill {
    int data;
    int phoneNumber;
    std::string code;
    int totalBill;
};

int main () {
    std::vector<MonthPhoneBill> dataEntry;
    ....
    ....
    MonthPhoneBill temp;
    // After Putting data into vector, one can simply access the data by.
    while (fin >> temp.code>> temp.phoneNumber >> temp.data >> temp.totalBill) {
            bill.push_back(temp);
   }

请记住,文件的内容也应该采用 while 循环中的格式,并且您必须流式传输该结构的所有内容。你不能错过它,如果发生所有其他条目将是垃圾或可能导致代码崩溃

auto temp0 = dataEntry[1].data;
auto temp1 = dataEntry[1].phoneNumber;
auto temp2 = dataEntry[1].code;
   ....
}

您可以简单地操作和访问数据。

【讨论】:

    【解决方案2】:

    就像@Sam Varshavchik 所说,看看第三行有什么不同,因为它确实不同 - 它缺少最后一个值,data 成员。这会导致while 退出,因为它在执行while (fin &gt;&gt; temp.code&gt;&gt; temp.phoneNumber &gt;&gt; temp.data) 的最后一部分时没有遇到任何数据,即&gt;&gt; temp.data

    至于第二个问题,就像@Sam Varshvchik 所说的那样 - 请参阅您的 C++ 书籍。您可以在任何操作中操作类条目的向量,就像您在打印内容时所做的那样。

    在我看来,要计算每个人的总账单,您的程序需要进行一些更改。由于您的用户在主向量中重复,一种方法是遍历它并将重复分组到每个用户的单个类对象中,并汇总账单。另一种方法是按电话号码(即用户)对主向量进行排序。排序后,您可以使用类似于Lippman's C++ Primer 第 7 章中的方法。

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 2012-09-21
      • 2013-02-22
      • 2012-09-04
      • 1970-01-01
      • 2018-03-23
      • 2021-04-21
      • 2018-03-22
      相关资源
      最近更新 更多