Помогите исправить ошибку, пожалуйста
Всем привет. Есть программа, которая должна удалять двузначные числа в массиве. Элементы удаляются, но когда я пытаюсь вывести их(по сути это же пустые элементы), они выводятся как космическое число. А так же при попытке вывода оставшихся почему то не все выводится. В общем помогите пожалуйста.
#include "stdafx.h"
#include <ctime>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;
int* delete_el(int *array, int &size, int index)
{
size--;
int *temp;
temp = (int *) malloc((size)*sizeof(int));
int ind = 0;
for (int i =0; i < size; i++)
{
if (i != index)
{
*(temp+ind) = array[i];
ind++;
}
}
return temp;}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "russian");
srand(time(0));
cout << "В целочисленном массиве X(N) удалить все двузначные числа. Удаляемые элементы записывать в новый массив. Вывести сообщение, сколько элементов было удалено." << endl;
int n;
cout << "Введите размер массива" << endl;
cin >> n;
int *X, *Y, count;
count = 0;
X = new int [n];
Y = new int [n];
cout << "Массив X(N): ";
for (int i = 0; i < n; i++)
{
X[i] = rand() % 20;
cout << X[i] << " ";
if ((X[i] >= 10) && (X[i] < 100))
{
Y[count] = X[i];
X = delete_el(X, n, i);
count++;
}
}
cout << endl;
cout << "Массив удаленных чисел:" << " ";
for (int i = 0; i < count; i ++ )
{
cout << Y[i] << " ";
}
cout << endl;
cout << "Массив оставшихся чисел:" << " ";
for(int i = 0; i < n-count; i ++)
{
cout << X[i] << " ";
}
cout << endl << "Количество удаленных чисел: " << count << endl;
system("pause");
return 0;}
Ответы (1 шт):
Автор решения: Павел Ериков
→ Ссылка
Если я вас правильно понял. То вы хотите удалять из массива X элемент посредством создания нового temp и копирования туда всех элементов кроме с индексом index.
Функция delete_el:
int* delete_el(int* array, int size, int index)
{
//Выделяем память под новым массив без учета одного элемента
int* temp;
temp = (int*)malloc((size - 1) * sizeof(int));
int ind = 0;
//Копируем все элементы array в новый массива без элемента
//с индексом index
for (int i = 0; i < size; i++)
{
if (i != index) {
*(temp + ind) = array[i];
ind++;
}
}
//Удалим старый массив
delete[] array;
//Вернем новый массив
return temp;
}
В функции main приведу только основной цикл:
for (int i = 0; i < n; i++)
{
//Если мы генерируем число из двух цифр, то
//мы пропускаем X[i - 1] и сразу бы записывали
//в X[i] новое число, НО отсюда и появляются случайное число из памяти
//По этому надо писать i - count чтобы не было пропусков
//И везде теперь используем i - count
X[i - count] = rand() % 200;
cout << X[i - count] << " ";
if ((X[i - count] >= 10) && (X[i - count] < 100))
{
Y[count] = X[i - count];
//Не выделяем память каждый раз по все n элементов
X = delete_el(X, n - count, i - count);
count++;
}
}
Код не оптимизированный, как минимум потому что выделять каждый раз память, под новый массив это нецелесообразно.