我得到了一个课堂项目,但被困在其中的一部分上。该项目中有这张表:
如何将此信息创建到顺序文件中以读入 C++ 程序?看起来这将是一个 3 维数组。我是不是看得太远了?
这取决于你想要做什么。通常,如果您只是想读取它,您可以将其存储为平面文件。对于平面文件,您通常有两种常见的格式,固定长度记录或逗号分隔(您可以实现其他平面文件格式,但这是两种常见的格式)。
在定长记录中,每条记录都是固定长度,每个字段都是固定长度。例如
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”等关键字,然后您还必须标记这些项目,因为它们
您可能会使用各种约定。例如,
Turkey
Turkey, 1.00
Swiss, 0.30
Roll, 0.30
Condiments, 0.10
Pastrami
Pastrami, 1.30
Swiss, .40
...
这种格式很容易阅读:一行表格标题,然后是用逗号分隔的成分/价格对,然后是一个空行。然后重新开始。
我不确定你是否知道HashMaps
。如果没有,你可以查一下。使用它会非常简单。
您可以拥有map
一个key = String
和value = Integer
。将有 4 个键,“Turkey”、“pastrami”、“Ham”和“Special”,您可以将与它们关联的值作为1,2,3,4
.
然后你可以让其他 4 人maps
各有key = String
和Value = float
并输入上述数据。您可以使用第一张地图来检查正确的列,并使用其他地图来获取成本。
您当然可以使用上述方法来实现,2D - arrays
但这将是一个很好的学习体验。祝你好运!!