Извлечение парных чисел из массива - PullRequest
0 голосов
/ 24 апреля 2018

Добрый вечер, ребята.

В настоящее время я испытываю трудности с извлечением парных чисел из массива.У меня есть следующий код:

#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;
}

Так что я думаю, что я правильно понял инициализацию нового массива в функции paire, но у меня возникают трудности с итерацией по массиву.

PS Я первый год в университете, поэтому я был бы очень благодарен, если бы вы сохранили ту же простоту в ответах.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Вы можете еще больше упростить свою функцию, присвоив ей значение length и вернув counter выходным параметром.

#include <iostream>

using namespace std;

int *paire(int *d, int length, int &counter) {
    counter = 0;
    int *k = new int[length]; // allocate for the maximum memory
    for (int i = 0; i < length; ++i) {
        if (d[i] % 2 == 0) {
            k[counter++] = d[i];
        }
    }
    return k;
}

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

Но учтите, что, как уже отмечали другие, этот метод весьма подвержен ошибкам в том смысле, что он оставляет за клиентом ответственность за удаление внутренней памяти, используемой функцией paire.

0 голосов
/ 24 апреля 2018

Похоже, вам нужно вернуть 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 и использовать ссылки на передать обратно оба значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...