大家好,并提前为新手提问,但我没有找到任何与我的问题相关的话题。我有一个产品的文本文件,如下所示:
//没有。 //说明//价格
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");
}
我应该尝试创建一个函数来放入代码吗?
答案 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
假设您不知道如何使用class
或struct
每个字段都可以单独阅读:
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
的一个不错的功能是,您可以像数组一样访问它,它会根据需要自动增加容量。