Передача / разделение определенных элементов массива на другие массивы

0

Пусть говорят, что пользователь вводил числа 10, 11, 22, 33, 44, 55, 66, 77, 88 и 99 в массив. Затем программа должна выделять числа ниже 50 и выше 50 на два разных массива, а именно array2 и array3. Но когда я запускаю свою программу, он отображает некоторую память мусора в array2 и array3.

Моя программа будет работать с дисплеем:

Числа в массиве 1

10, 11, 22, 33, 44, 55, 66, 77, 88, 99

Числа в массиве2

1972394090, 22, 33, 44, 0, 4202032, 2686624, 2686680, 2686924, 10, 11

Числа в массиве 3

2686700, 4202032, 0, 2686604, 55, 66, 77, 88, 99, 1972394134, 1972394090

это мой код функции (N определяется как 10)

void segArr(int array[N], int array2[N], int array3[N])
{

    int i;


    for(i=1; i<N; i++)
    {
        if(array[i]<50)
            array2[i]=array[i];
        if(array[i]>50)
            array3[i]=array[i];
    }

    return;
}
  • 0
    что вы ожидали от элемента, скажем, array2[1] ? Вы ничего не назначали ему, поэтому он будет содержать случайные биты. Я рекомендую изучить C ++, прежде чем спрашивать
Теги:
arrays

3 ответа

1

Возможно, вы хотите сделать что-то вроде этого:

const int split=50;
int n2=0, n3=0;
for(int i1=0; i1!=n1; ++i1)
  if(array1[i1] < split)
    array2[n2++] = array1[i1];
  else
    array3[n3++] = array1[i1];
// n2,n3 now hold the filled sizes of array2 and array3

Конечно, все это гораздо лучше сделано с использованием std контейнеров... В частности, вас может заинтересовать std::partition или std::stable_partition, которые переупорядочивают порядок или элементы в массиве/контейнере.

0

Это потому, что вы, вероятно, объявляете вектор следующим образом:

std::vector<int> array2(10);

и отображать каждый элемент в этом векторе. Если какой-то элемент пуст, вы показываете случайные данные.

вы должны просто указать вектор, а не использовать push_back() fe

if(array[i]>50)
array2.push_back(array[i]);
0

Для начала индексы массива начинаются с 0, а не 1. Во-вторых, вы действительно копируете интересующие элементы массива, но какой бы старый массив не array2 в array2 а array3 не очищался и, очевидно, не был установлен в вызывающем коде либо: почему, когда вы печатаете элементы массива, вы видите значения "мусора", такие как 1972394090, хотя технически это неопределенное поведение, даже чтобы попытаться напечатать неинициализированное значение, и вы могли бы в равной степени отключить или иным образом сбой программы.

Возможно, вы захотите сделать что-то вроде этого:

void segArr(int array[N], int array2[N], int array3[N])
{
    size_t i2 = 0, i3 = 0;
    for (size_t i = 0; i < N; ++i)
    {
        if (array[i] < 50)
            array2[i2++] = array[i];
        else if (array[i] > 50)
            array3[i3++] = array[i];
    }
    if (i2 < N) array2[i2] = 50;
    if (i3 < N) array3[i3] = 50;
}

Таким образом, вы можете распечатать элементы array2 и array3 0 по N-1, останавливаясь раньше, если вы увидите значение 50. (Я использую 50 в качестве значения для конечного результата, потому что это единственное целочисленное значение, которое вы никогда не могли бы иметь в array2 или array3.)

  • 0
    Ваши array2[] и array3[] все еще содержат мусор ...
  • 0
    @Walter: Да, вполне сознательно ... только элементы в начале каждого - вплоть до значения 50 часового или элемента [N-1] если нет 50 - не будут мусором. Я не вижу смысла тратить время / код, устанавливая эти элементы на что-либо, кроме мусора, когда страж дает понять, где останавливаются значимые данные. Когда вы зациклите их печать, остановитесь, когда увидите 50, и все ранее напечатанные значения не должны быть мусором.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню