【问题标题】:Looping through array and assigning certain values to another array [closed]循环遍历数组并将某些值分配给另一个数组[关闭]
【发布时间】:2019-08-16 11:30:48
【问题描述】:

所以我有一个包含 16 个元素的数组。我知道在这个数组中有 2 个我不想要的元素。所以我声明了另一个大小为 14 的数组。但是,我如何循环遍历 16 个元素数组并将这 14 个变量分配给新数组而没有空格,因为其他 2 个值也在循环中的某个点使用。

例如:

double firstArray[16] = {10.0, 2.0, 3.4, 7.0, 50.0, 1.2, 4.2, 6.8, 8.9, 7.9, 8.6, 2.1, 3.2, 4.7, 8.9, 0.8};

我想遍历这个数组,把除 2.0 和 3.4 以外的所有值放入:

 double secondArray[14]

我一直在使用 foo 循环,但由于它使用相同的索引,它会在第二个数组中留下空格并且不会到达末尾。

【问题讨论】:

  • 你知道如何循环数组吗?您知道如何将一个变量的值分配给另一个变量吗?您知道如何访问特定索引处的数组元素吗?你知道如何将变量加一吗?然后你真的知道所有你需要知道的。所以请尝试创建一个minimal reproducible example 向我们展示,并告诉我们问题所在。也许还需要一些时间来刷新how to ask good questions,以及this question checklist
  • 您清楚地知道,并非源数组的所有元素都会在目标数组中的同一位置结束,因此您不能将源数组索引用作目标数组索引——至少,不直接。你还能做什么?

标签: c arrays loops for-loop


【解决方案1】:

在 for 循环中声明两个变量作为索引。

你来了

#include <stdio.h>

int main(void) 
{
    enum { N = 16 };
    double firstArray[N] = 
    {
        10.0, 2.0, 3.4, 7.0, 50.0, 1.2, 4.2, 6.8, 
        8.9, 7.9, 8.6, 2.1, 3.2, 4.7, 8.9, 0.8
    };

    double secondArray[N - 2];

    for ( size_t i = 0, j = 0; i < N; i++ )
    {
        if ( firstArray[i] != 2.0 && firstArray[i] != 3.4 )
        {
            secondArray[j++] = firstArray[i];
        }           
    }

    for ( size_t i = 0; i < N - 2; i++ ) printf( "%.1f ", secondArray[i] );
    putchar( '\n' );

    return 0;
}

程序输出是

10.0 7.0 50.0 1.2 4.2 6.8 8.9 7.9 8.6 2.1 3.2 4.7 8.9 0.8 

事实上你不需要定义第二个数组。您可以将不需要的值移动到原始数组的末尾,并保留数组中实际元素的新值。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2018-04-09
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多