将C ++文本文件转换为数组。 (新手)

时间:2016-12-20 20:21:41

标签: c++

大家好,并提前为新手提问,但我没有找到任何与我的问题相关的话题。我有一个产品的文本文件,如下所示:

//没有。 //说明//价格

100 Office_seat 102.99

200 Desk 224.99

300 Computer_desk 45.49

400 Desk_Lamb 23.99

500书柜89.49

我想阅读它并将其保存在一个数组中,我稍后将从中搜索Product_pin并计算客户购买的总价格。

尝试了类似我发布的代码,但我想我开始都错了。我会感激任何建议。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;


int main()
{
    ifstream file("Proionta.txt");
    if(file.is_open())
    {
        string myArray[15];
        for(int i=0;i<15;i++)
        {
            file>>myArray[i];

        }
    }
system ("pause");
}

我应该尝试创建一个函数来放入代码吗?

1 个答案:

答案 0 :(得分:1)

让我们从记录建模概念开始,然后得到原始的。

您希望将文本行建模作为记录

struct Record
{
  unsigned int number;
  std::string  description;
  double       price;
};

下一步是为operator>>

重载Record
struct Record
{
  unsigned int number;
  std::string  description;
  double       price;

  friend std::istream& operator>>(std::istream& input, Record& r);
};
std::istream& operator>>(std::istream& input, Record& r)
{
  input >> r.number >> r.description >> r.price;
  return input;
}

使用上面的代码,您可以读取文件:

std::vector<Record> database;
Record r;
while (my_text_file >> r)
{
  database.push_back(r);
}

编辑1:没有struct
假设您不知道如何使用classstruct 每个字段都可以单独阅读:

unsigned int number;
std::string  description;
double price;
while (my_text_file >> number >> description >> price)
{
  // Do something with number, description, price
}

编辑2:阵列与矢量
许多作业要求您对数据执行某些操作,例如平均值或搜索。这通常需要您保存数据 两个流行的容器(从学生的角度来看)是数组和std::vector

数组不是一个好选择,因为对于文件I / O,你永远不能确定有多少条记录,而且数组在容量上是静态的(永远不会改变)。所以你需要自己调整大小:

static const unsigned int initial_capacity = 16U;
Record database[initial_capacity];
unsigned int capacity = initial_capacity;
Record r;
unsigned int items_read = 0;
while (my_text_file >> r)
{
  if (items_read < capacity)
  {
    database[items_read] = r;
    ++items_read;
  }
  else
  {
     // Allocate new, larger array
     // Copy items from old array to larger array.
     // Update capacity variable.
     // Delete old array
     // Change database pointer to new array
  }
}

std::vector的一个不错的功能是,您可以像数组一样访问它,它会根据需要自动增加容量。