Форум программистов, компьютерный форум CyberForum.ru

Удалить 0 эл-ты из одномерного массива - C++

Восстановить пароль Регистрация
 
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
29.12.2010, 15:52     Удалить 0 эл-ты из одномерного массива #1
Подкиньте программу удаляющую из одномерного массива все 0 элементы. Заранее благодарен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2010, 15:52     Удалить 0 эл-ты из одномерного массива
Посмотрите здесь:

C++ Как удалить из одномерного массива первый отрицательный элемент
Удалить из символьного одномерного массива повторяющиеся символы C++
C++ Удалить из одномерного массива промежуток элементов от максимального до минимального.
C++ Удалить элементы из одномерного массива
C++ Указатели . Удалить из одномерного массива элемент с заданным номером, добавить К элементов, начиная с заданного номера
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
29.12.2010, 15:54     Удалить 0 эл-ты из одномерного массива #2
А разве в одномерном массиве нулевых элементов несколько?
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
29.12.2010, 15:56  [ТС]     Удалить 0 эл-ты из одномерного массива #3
Цитата Сообщение от Netscape Посмотреть сообщение
А разве в одномерном массиве нулевых элементов несколько?
Нет, тогда получается, что задача не правильно сформулирована)
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
29.12.2010, 16:00     Удалить 0 эл-ты из одномерного массива #4
Цитата Сообщение от M@ker Посмотреть сообщение
Подкиньте программу удаляющую из одномерного массива все 0 элементы. Заранее благодарен!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main() 
{ 
      srand(static_cast<int>(time(NULL)));
      int *arr,*arr1,cnt=0,k=0,N; 
      cout<<"Enter size of array -> ";
      cin>>N;
      arr=new int[N];
      cout<<"Array -> : "<<endl;
       for(int i=0; i<N; i++)
        {
            arr[i]=rand()%10;
            cout<<arr[i]<<"  ";
             if(arr[i])
             {
                 cnt++;
             }
        }
      arr1=new int[cnt];
      cout<<endl<<"Result -> ";
       for(int i=0; i<cnt; i++)
       {
           if(arr[i])
           {
               arr[k]=arr[i];
               cout<<arr[k]<<"  ";
               k++;
           }
       }
      delete []arr;
      delete [] arr1;
     system("pause");
     return 0;
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.12.2010, 16:11     Удалить 0 эл-ты из одномерного массива #5
Цитата Сообщение от Netscape Посмотреть сообщение
А разве в одномерном массиве нулевых элементов несколько?
Думается, имелось в виду, что нужно удалить элементы, равные нулю. Вот решение с одним массивом, до кучи:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
#define N 25
#define L_T -3
#define R_T 3
 
void display(int*, size_t);
void shift(int*, size_t, size_t);
 
int main()
{
    srand((size_t) time(NULL));
    int array[N];
    size_t k = N;
    size_t i;
    for(i = 0; i < N; ++i)
        array[i] = rand() % (R_T - L_T + 1) + L_T;
        
    puts("Initial array:");
    display(array, N);
    for(i = 0; i < k; )
        if(array[i] == 0)
            shift(array, i, k--);
        else
            ++i;
            
    puts("Array without zeros:");
    display(array, k);
    exit(0);
}
 
void display(int* a, size_t n)
{
    size_t i;
    printf("[%u] ", n);
    for(i = 0; i < n; ++i)
        printf("%d ", a[i]);
    putchar('\n');
}
 
void shift(int* a, size_t j, size_t size)
{
    size_t i;
    for(i = j; i < size - 1; ++i)
        a[i] = a[i + 1];
}
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
29.12.2010, 17:05     Удалить 0 эл-ты из одномерного массива #6
Цитата Сообщение от Nameless One Посмотреть сообщение
Думается, имелось в виду, что нужно удалить элементы, равные нулю.
Тогда задам маленький вопрос.
Почему все удаление делают через переписывание элементов в другой массив или урезают существующий?
Почему бы действительно не удалить элементы, например, функцией realloc()?
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.12.2010, 17:09     Удалить 0 эл-ты из одномерного массива #7
Цитата Сообщение от Netscape Посмотреть сообщение
Почему все удаление делают через переписывание элементов в другой массив или урезают существующий?
Встречный вопрос: у кого ты видел урезание массива?
У меня просто происходит сдвиг элементов. А как ты предлагаешь делать через realloc? К примеру, у нас массив из 512 элементов, и один из них (с индексом 255) - равен нулю, а все остальные - отличны от нуля.
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
29.12.2010, 17:25     Удалить 0 эл-ты из одномерного массива #8
Цитата Сообщение от Nameless One Посмотреть сообщение
У меня просто происходит сдвиг элементов.
Я же ничего против не имею, сдвинули, потом realloc'ом обрезали.

Когда-то я искал как удалить элементы массива, перечитал кучу сайтов и форумов и везде или просто переписывали, или расписывали преимущества <vector>.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.12.2010, 17:28     Удалить 0 эл-ты из одномерного массива #9
Цитата Сообщение от Netscape Посмотреть сообщение
потом realloc'ом обрезали.
ИМХО, это уже лишнее
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
29.12.2010, 17:33     Удалить 0 эл-ты из одномерного массива #10
Цитата Сообщение от Nameless One Посмотреть сообщение
ИМХО, это уже лишнее
В данном случае точно.
Но всякое бывает...
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
29.12.2010, 18:19  [ТС]     Удалить 0 эл-ты из одномерного массива #11
Добавлено через 3 минуты
Пользователь должен сам вводить элементы! И можно попроще? Зачем столько функция? ничего не поймешь. Пожалуйста, сократите до минимума чтобы разобраться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2010, 20:19     Удалить 0 эл-ты из одномерного массива
Еще ссылки по теме:

C++ Удалить из целочисленного одномерного массива все элементы, в записи которых все цифры различны
Удалить из одномерного массива все четные элементы без изменения порядка C++
Удалить все нечетные элементы одномерного массива C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
29.12.2010, 20:19     Удалить 0 эл-ты из одномерного массива #12
Еще вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
void swap(int *a, int *b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
 
int main()
{
    const size_t n = 5;
    size_t cnt = 0, _i;
    int a[n] = {0, 8, 0, 5, 0},
    rem = 0;
 
    for(size_t i = 0; i < n; ++i)
        if(a[i] == rem)
            ++cnt;
 
    for(size_t i = 0; i < n; ++i)
    {
        if(a[i] == rem)
        {
            _i = i;
            for(size_t j = i + 1; j < n; ++j)
                swap(&a[_i++], &a[j]);
        }
    }
 
    for(size_t i = 0; i < n - cnt; ++i)
        std::cout << a[i] << ' ';
}
Yandex
Объявления
29.12.2010, 20:19     Удалить 0 эл-ты из одномерного массива
Ответ Создать тему
Опции темы

Текущее время: 09:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru