编程新手,请耐心等待! 在C中,假设您有一个数组{0,1,0,1,0,0,0}。如何返回所有值为1的索引位置?所以在这种情况下,它将是{1,3}。当我在数组中查找最大/最小/出现次数时,我没有遇到任何麻烦,因为您可以保持持续的“计数”值。但是我不能理解这个,因为我没有看到for循环如何工作。这是我尝试过的:
for (i = 0; i < numValues; i++) {
if (array[i] == 1) {
result[i] = i;
} }
其中result []是一个新数组(我想我需要一个新数组,因为有超过1个输出)。但这只发现第一次出现并忘记了第二次出现。
感谢您的帮助!
答案 0 :(得分:2)
为事件保留单独的索引。如果result
只需要保留出现次数,则需要保留两个数组(一个是临时的,一个是最终结果),或者是第一次通过array
来查明出现的次数在进行第二次传递以复制索引之前存在或匹配。以下是使用两个数组的方法:
int occurence = 0;
int* occurrences = malloc(sizeof(int) * numValues);
for (int i = 0; i < numValues; i++) {
if (array[i] == 1) {
occurrences[occurence++] = i;
}
}
int* result = malloc(sizeof(int) * occurence);
for (int i = 0; i < occurence; i++) {
result[i] = occurrences[i];
}
free(occurrences);
/* do stuff with result... */
free(result);
您可以通过result
调整每场比赛的realloc
数组来一次性完成,但这需要更多时间。
答案 1 :(得分:1)
由于您是编程新手,让我们简单一点。
让我们假设您并不担心result
持有的空间/内存。
int onesCount = 0; // number of 1(s) count
for (i = 0; i < numValues; i++) {
if (array[i] == 1) {
result[onesCount] = i;
onesCount++;
}
}