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

Удаление элементов массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
Jasper
0 / 0 / 0
Регистрация: 07.12.2009
Сообщений: 58
06.03.2010, 06:15     Удаление элементов массива #1
Возможно ли в С удалять элементы массива? Например: 10, 14, 1, 2, 80 надо удалить 1 что бы получилась 10 , 14, 2, 80
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
06.03.2010, 07:00     Удаление элементов массива #2
Удалять элементы массива нельзя, можно сдвинуть правую часть массива на удаляемый элемент, иначе это список.
C
1
2
3
for(i = m; i < n-1; i++)
  array[i] = array[i+1];
n--;
m - элемент, который удаляем
n - кол-во элементов массива array.
Jasper
0 / 0 / 0
Регистрация: 07.12.2009
Сообщений: 58
06.03.2010, 07:25  [ТС]     Удаление элементов массива #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main ()
{
    int N=10;
    int Mass[10]={1,2,3,4,5,6,7,8,9,10};
    int i=0;
    int M=5;
    for (i=M; i<N-1; i++)
    
        Mass[i]=Mass[i+1];
    N--;
    for (i=0;i<N;i++)
    printf (" %i\n", Mass[i]);
        getch ();
}
Выводит массив Mass не изменяя его.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.03.2010, 07:47     Удаление элементов массива #4
Jasper, А если внимательней присмотреться? Учтите, что индексы у массивов начинаются с 0, так что Вы своим кодом "удаляете" элемент равный 6.
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
06.03.2010, 08:36     Удаление элементов массива #5
все верно, элемента №5 или цифры 6 уже нет с нами
Jasper
0 / 0 / 0
Регистрация: 07.12.2009
Сообщений: 58
06.03.2010, 08:38  [ТС]     Удаление элементов массива #6
Этот алгоритм работает для последовательности 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, а для последовательности, например 10,100,11,12,14,15,12,17,18,200
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
06.03.2010, 08:47     Удаление элементов массива #7
Цитата Сообщение от Jasper Посмотреть сообщение
Этот алгоритм работает для последовательности 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, а для последовательности, например 10,100,11,12,14,15,12,17,18,200
Этот алгоритм работает для массива, не имеет значения сколько и какие числа там, лишь бы памяти хватило
10 - нулевой элемент, 100 - первый, 11 - второй эл-т массива и т.д.
избавиться от числа 14, нужно подставить 4 вместо М в алгоритме, т.к. 14 - четвертый элемент в массиве
Amarted
 Аватар для Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
07.03.2010, 04:18     Удаление элементов массива #8
Цитата Сообщение от Jasper Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main ()
{
    int N=10;
    int Mass[10]={1,2,3,4,5,6,7,8,9,10};
    int i=0;
    int M=5;
    for (i=M; i<N-1; i++)
    
        Mass[i]=Mass[i+1];
    N--;
    for (i=0;i<N;i++)
    printf (" %i\n", Mass[i]);
        getch ();
}
Выводит массив Mass не изменяя его.
Не пойму вашей логики, во первых зачем использовать дополнительную переменную M для инициализации i если можно сразу инициализировать i значением M...
Во вторых сдвигая элементы вы не удаляете нужный вам элемент, а просто сдвигаете, а количество элементов как было 10 так 10 и осталось! изменять размер стандартного массива нельзя.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2010, 05:05     Удаление элементов массива
Еще ссылки по теме:

удаление элементов массива, совпадающих с элементами другого массива C++
C++ Удалить из массива A[N] вс отрицательные элементы.Удаление отрицательных элементов массива оформить в виде функции
C++ Удаление элементов массива

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.03.2010, 05:05     Удаление элементов массива #9
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define DEFAULT_ARRAY_SIZE 10
 
int main(void){
    size_t cnt = DEFAULT_ARRAY_SIZE, i;
    int *arr = NULL;
    
    if ( ( arr = (int*)calloc(cnt, sizeof(int)) ) == NULL ){
        fprintf(stderr, "Memory error!\n");
        exit(1);
    }
    printf("Enter %d integer values for array elements:\n", cnt);
    for ( i = 0; i < cnt; ++i ){
        printf("ARRAY[%d] = ", i);
        if ( scanf("%d", &arr[i]) != 1 ){
            fprintf(stderr, "Can't get some array value!\n");
            exit(1);
        }
    }
    
    printf("Enter index for remove: ");
    if ( scanf("%d", &i) != 1 || i >= cnt ){
        fprintf(stderr, "Can't get index or wrong index!\n");
        exit(1);
    }
    if ( i < cnt - 1 )
        memmove(arr + i, arr + i + 1, sizeof(int) * (cnt - i - 1));
    if ( ( arr = (int*)realloc(arr, --cnt * sizeof(int)) ) == NULL ){
        fprintf(stderr, "Can't change array size!\n");
        exit(1);
    }
    
    printf("Now array contains of %d elements:\n", cnt);
    for ( i = 0; i < cnt; ++i )
        printf("ARRAY[%d] = %d\n", i, arr[i]);
    
    free(arr);
    arr = NULL;
    exit(0);
}
Yandex
Объявления
07.03.2010, 05:05     Удаление элементов массива
Ответ Создать тему
Опции темы

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