首页 > 解决方案 > 从数组中提取对数

问题描述

晚安,伙计们。

我目前在从数组中提取对数时遇到困难。我有以下代码:

#include <iostream>

using namespace std;

int *paire(int *d, int length) {
    int counter = 0;
    int position = 0;
    for (int i=0; i<length; i++) {
        if (d[i] % 2 ==0)
            counter++;
    }

    int *k = new int[counter];
    for (int i=0; i<length; i++) {
        if (d[i] % 2 ==0) {
            k[position] = d[i];
            position++;
        }
    }
    return k;
}

int main() {
    int b[8] = {1,2,3,4,5,6,7,8};
    int *array1 = paire(b,8);
    for (int i=0; i<5; i++) { // how can I point here to the counter in paire() ?
        cout<<array1[i];
    }
   delete[] array1;
    return 0;
}

所以我认为我在 function 中初始化新数组是正确的paire,但是我在遍历数组时遇到了困难。

PS我是大学一年级,所以如果你能在答案中保持同样的简单性,我将非常感激。提前致谢!

标签: c++arrayspointers

解决方案


看来您需要返回 2 个单独的值:数组 b 中的偶数个数,以及专门存储这些偶数的新分配内存的地址。

由于您不能返回多个变量,因此对代码进行最少修改的一种解决方案如下。

int *paire(int *d, int length, int& counter) {
    counter = 0;

    // rest of your function remains unchanged
    // ...
}

int main() {
    int b[8] = {1,2,3,4,5,6,7,8};
    int evenNumbers;
    int *array1 = paire(b,8, evenNumbers);
    for (int i=0; i<evenNumbers; i++) {
        cout<<array1[i];
    }
    delete [] array1;
    return 0;
}

或者,您可以返回值counter并将对int*变量的引用作为参数发送给paire函数。或者,您可以声明paire具有返回类型void并使用引用来传回这两个值。


推荐阅读