我需要知道,如何将stdin中的整数保存到数组中,由行中的第一个整数给出...嗯...希望你理解。我会举个例子。
在stdin上我有:
0 : [ 1, 2, 3 ]
5 : [ 10, 11, 12, 13]
6 : [ 2, 4, 9 ]
0 : [ 4, 9, 8 ]
5 : [ 9, 6, 7 ]
5 : [ 1 ]
我需要将这些整数保存到这样的数组中:
0={1, 2, 3, 4, 9, 8}
5={10, 11, 12, 13, 9, 6, 7, 1}
6={2, 4, 9}
我绝对不知道怎么做。有一个问题,数组的数量(在这种情况下 - 0,5,6 - 3个数组)可能非常高,我需要有效地处理内存...所以我想我需要像{{ 1}}和malloc
来解决这个问题,还是我错了?可以更改数组(0,5,6)的名称。括号中的整数数没有最大限制。
感谢您的帮助。
答案 0 :(得分:1)
我假设,这是家庭作业,我假设,这不是你的第一个家庭作业,所以我不会给你一个解决方案,而是一些有用的提示你自己解决。
给定输入行
5:[10,11,12,13]
我会打电话给" 5" "数组名称"和10,11,12和13要添加的值。
size_t num_arrays;
size_t * array_names;
此处,在您的示例输入中,num_arrays
最终会3
array_names[3] = { 0, 5, 6}
。如果找到新的数组名称realloc
并添加新的数组名称。您还需要值的实际数组:
int * * array;
每个新数组名称需要realloc
数组(如realloc
array_names)。 array[0]
代表数组array_names[0]
此处数组0
,array[1]
代表数组array_names[1]
此处数组5
和array[2]
代表数组array_names[2]
此处为数组6
。
要访问数组,请按以下方式找到它的索引:
size_t index;
for (size_t index = 0; index < num_arrays && array_names[index] != search; ++index) ;
realloc
那个(array[index] = realloc(array[index], new size)
)并在那里添加元素array[index][i+old_size] = new_value[i]
。显然,您还需要跟踪单独数组中元素的数量;)
提示:如果搜索数组名称花费的时间太长,则必须用一些更复杂的数据结构替换那个简单的映射部分,比如哈希映射或二叉搜索树。概念的其余部分可能或多或少保持不变。
如果您在解析输入行时遇到问题,我建议您在此解析部分上打开一个新问题。
答案 1 :(得分:0)
在算法术语中,您需要从int
s到数组的映射(关联数组)。很久以前,大多数高级语言都解决了这个问题。
如果你必须手动实现它,你有几个选择:
for
每次搜索时将0,5,6,1000000然后映射它们存储到索引0,1,2,3中你必须访问它(这太费时了; 最后两个结构是编程经典的一部分,并在各种文章和书籍中有详细描述。