Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回在C中数组中包含某个值的所有索引位置_C_Arrays_Loops - Fatal编程技术网

返回在C中数组中包含某个值的所有索引位置

返回在C中数组中包含某个值的所有索引位置,c,arrays,loops,C,Arrays,Loops,编程新手,请耐心听我说! 在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; } } for(i

编程新手,请耐心听我说! 在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;
} }
for(i=0;i
其中result[]是一个新数组(我想我需要一个新数组,因为有多个输出)。但这只发现了第一次,忘记了第二次


谢谢你的帮助

为事件保留单独的索引。如果
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);
int-occurrence=0;
int*出现次数=malloc(sizeof(int)*numvalue);
for(int i=0;i

您可以通过
realloc
在每次匹配时调整
结果
数组的大小,一次完成,但这需要更多的时间。

由于您是编程新手,让我们简化编程。 假设您不担心
result
所包含的空间/内存

int onesCount = 0; // number of 1(s) count
for (i = 0; i < numValues; i++) {
   if (array[i] == 1) {
      result[onesCount] = i;
      onesCount++;
   }
}
int-onescont=0;//1(s)个计数的数目
对于(i=0;i
您可以一次完成:使用
result=malloc(sizeof(*result)*numValues)
分配
result
,然后扫描数组,从前面填充
result
(保证有足够的空间),最后
realloc()
将生成的数组分配到正确的大小。
realloc
将创建第二个数组,无论如何,只要重新分配指针就行了。不一定。它也可以将分配分成两部分,一部分是已使用的,另一部分是未使用的。如果它这样做,那只是
malloc()
内部元数据中的一个变化,可能具有恒定的复杂性。当然,
realloc()。