3

我得到了一个课堂项目,但被困在其中的一部分上。该项目中有这张表:

在此处输入图像描述

如何将此信息创建到顺序文件中以读入 C++ 程序?看起来这将是一个 3 维数组。我是不是看得太远了?

4

3 回答 3

1

这取决于你想要做什么。通常,如果您只是想读取它,您可以将其存储为平面文件。对于平面文件,您通常有两种常见的格式,固定长度记录或逗号分隔(您可以实现其他平面文件格式,但这是两种常见的格式)。

在定长记录中,每条记录都是固定长度,每个字段都是固定长度。例如

Turkey             1.00Swiss        .30Roll           .30Condiments         .10
Pastrami           1.30Swiss        .40Roll           .30Condiments         .10

在逗号分隔的语言中,您可以像这样执行 Turkey,1.00,Swiss,.30,Roll,.30,Condiment,.10

使用固定长度记录的缺点是一旦指定并且取决于谁是文件的接收者,您的字段永远不会增长。例如,如果您的价格字段是五个空格,那么您的最大值将是 99.99,并且您将很难增加字段大小,因为如果某些其他应用程序依赖它是 5 个字符,它将不再兼容。逗号分隔更灵活一点,因为分隔符是逗号。使用逗号分隔,您通常可以使字段变大,因为您的逗号是分隔符。

还有另一种选择,即创建一个我将称为域特定格式的ini类型作为示例,请看下面

Sandwich: Turkey
Deli Slice: Turkey,1.00
Deli Slice: Swiss,.30
Bread: Roll,.30
Condiments: .30

Sandwich: Pastrami
Deli Slice: Pastrami,1.00
Deli Slice: Swiss,.40
Bread: Roll,.30
Condiments: .10

这种格式更灵活,因为您可以添加更多字段。例如,假设您有一个名为 california 的新三明治,它需要肉奶酪和鳄梨。你可以像这样扩展它

Sandwich: California
Deli Slice: Turkey, 1.00
Deli Slice: American, .30
Deli Slice: Avocado, .50
Bread: Roll,.30
Condiments: .10

使用这第三种格式和一些仔细的编程,您的新三明治将自动向后兼容。

每个文件都采用不同的读入策略。有一种叫做解析的东西,每个文件都有不同的方法。在固定长度记录中,方法是按字符位置读取每一列。在逗号分隔的文件中,您需要标记在 C++ 中读入的每一行,您有一个 strtok,但如果您使用托管 C++ .net,我相信您有一个 string.split。使用第三个选项,您实际上是在寻找诸如“Sandwich”、“Deli SLice”等关键字,然后您还必须标记这些项目,因为它们

于 2012-04-26T05:19:58.803 回答
0

您可能会使用各种约定。例如,

Turkey
Turkey, 1.00
Swiss,  0.30
Roll,   0.30
Condiments, 0.10

Pastrami
Pastrami, 1.30
Swiss,     .40
...

这种格式很容易阅读:一行表格标题,然后是用逗号分隔的成分/价格对,然后是一个空行。然后重新开始。

于 2012-04-26T04:53:46.740 回答
0

我不确定你是否知道HashMaps。如果没有,你可以查一下。使用它会非常简单。

您可以拥有map一个key = Stringvalue = Integer。将有 4 个键,“Turkey”、“pastrami”、“Ham”和“Special”,您可以将与它们关联的值作为1,2,3,4.

然后你可以让其他 4 人maps各有key = StringValue = float并输入上述数据。您可以使用第一张地图来检查正确的列,并使用其他地图来获取成本。

您当然可以使用上述方法来实现,2D - arrays但这将是一个很好的学习体验。祝你好运!!

于 2012-04-26T05:04:07.213 回答