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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
stx
6 / 6 / 0
Регистрация: 17.09.2012
Сообщений: 93
#1

Поиск и удаление элементов в одномерном массиве - C++

09.02.2014, 12:29. Просмотров 415. Ответов 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
44
#include <iostream>
using namespace std;
 
int main()
{
    int n, i, elem;
 
    cout << "Razmernost: ";
    cin >> n;
    cout << "Nuzhniy element: ";
    cin >> elem;
 
    int *mas = new int[n];
    int *mass = new int[n];
 
//заполним массив
    cout << "Zapolnim massiv: ";
    for(i=0; i<n; i++)
        cin >> mas[i];
 
//выведем заполненный массив
    cout << "Massiv 1: ";
    for(i=0; i<n; i++)
        cout << mas[i] << ' ';
 
//ищем нужный элемент
    for(i=0; i<n; i++)
        if(mas[i]!=elem)
            mass[i]=mas[i];
        else {
            mass[i] = mas[i+1];
            n--;
            }
 
//выведем обработанный массив
    cout << "\nMassiv 2: ";
    for(i=0; i<n; i++)
        cout << mass[i] << ' ';
 
delete []mas;
delete []mass;
 
return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 12:29     Поиск и удаление элементов в одномерном массиве
Посмотрите здесь:

C++ Поиск ключу в одномерном массиве структур
C++ Поиск элемента в одномерном массиве.
Поиск элемента в одномерном массиве C++
C++ Не могу найти ошибку с подсчетом суммы элементов в интервале[a,b] в динамическом одномерном массиве массиве.
Поиск одинаковых элементов в одномерном массиве C++
Поиск произведения нечетных отрицательных элементов в одномерном массиве C++
Поиск произведения положительных четных элементов в одномерном массиве C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
09.02.2014, 12:36     Поиск и удаление элементов в одномерном массиве #2
stx, а что не правильно? Код то рабочий
Жанерке
34 / 34 / 2
Регистрация: 22.09.2013
Сообщений: 170
09.02.2014, 12:48     Поиск и удаление элементов в одномерном массиве #3
Enotniy, повторы не удаляет. вот в чем проблема
Ev[G]eN
Эксперт С++
5095 / 1533 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
09.02.2014, 12:51     Поиск и удаление элементов в одномерном массиве #4
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
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
 
int main()
{
    std::vector <int> vector;
    std::cout << "Input elements: " << std::endl;
    std::copy(std::istream_iterator <int> (std::cin), std::istream_iterator <int> (), std::back_inserter(vector));
    
    std::cin.clear();
    std::cin.sync();
 
    int eraseElement;
    std::cout << "Input the element to erase: ";
    std::cin >> eraseElement;
 
    std::cout << "Result: " << std::endl;
    vector.erase(std::remove(vector.begin(), vector.end(), eraseElement), vector.end());
    std::copy(vector.begin(), vector.end(), std::ostream_iterator <int> (std::cout, " "));
 
    std::system("pause >> temp");
    return 0;
}
Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
09.02.2014, 12:59     Поиск и удаление элементов в одномерном массиве #5
stx,Поиск и удаление элементов в одномерном массиве
stx
6 / 6 / 0
Регистрация: 17.09.2012
Сообщений: 93
09.02.2014, 13:06  [ТС]     Поиск и удаление элементов в одномерном массиве #6
Цитата Сообщение от Enotniy Посмотреть сообщение
stx, а что не правильно? Код то рабочий
Произвольные результаты выдаёт.

Проверяю как работает:
1) Размерность = 3, заполняю массив = {1, 2, 3}, нужный элемент = "2", ответом будет {1, 3}.

2) Размерность = 5, заполняю массив = {1, 2, 3, 4, 5}, нужный элемент = "3", результат выполнения такой - {1, 2, 4, 4}.
А должно быть {1, 2, 4, 5}.

Проверяю на поиск и удаление повторяющихся элементов:
Размерность = 5, заполняю массив = {1, 2, 3, 3, 5}, нужный элемент = "3", результат выполнения такой - {1, 2, 3}.
А должно быть {1, 2, 5}.

Проверяю работу на большей размерности и элементами не идущими по порядку:
Размерность = 10, заполняю массив = {1, 2, 3, 5, 5, 6, 7, 5, 9, 10}, элемент выбираю = "5", результат выполнения такой - {1, 2, 3, 5, 6, 6, 7}.
А должно быть {1, 2, 3, 6, 7, 9, 10}.

Ставлю нужные элементы через один:
Размерность = 10, заполняю массив = {1, 3, 2, 3, 5, 3, 6, 3, 7, 3}, элемент выбираю = "3", результат выполнения такой - {1, 2, 2, 5, 5, 6, 6}.
Должно быть {1, 2, 5, 6, 7}.

Добавлено через 1 минуту
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
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
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
 
int main()
{
    std::vector <int> vector;
    std::cout << "Input elements: " << std::endl;
    std::copy(std::istream_iterator <int> (std::cin), std::istream_iterator <int> (), std::back_inserter(vector));
    
    std::cin.clear();
    std::cin.sync();
 
    int eraseElement;
    std::cout << "Input the element to erase: ";
    std::cin >> eraseElement;
 
    std::cout << "Result: " << std::endl;
    vector.erase(std::remove(vector.begin(), vector.end(), eraseElement), vector.end());
    std::copy(vector.begin(), vector.end(), std::ostream_iterator <int> (std::cout, " "));
 
    std::system("pause >> temp");
    return 0;
}
Увы, STL в программе нет.
Сделать нужно максимально просто.

Добавлено через 1 минуту
Цитата Сообщение от Enotniy Посмотреть сообщение
На скриншоте как раз видно, что ответ произвольный
daslex
1259 / 504 / 104
Регистрация: 02.08.2011
Сообщений: 2,554
09.02.2014, 15:07     Поиск и удаление элементов в одномерном массиве #7
добавить после 31 строки строчку
C++
1
for (int j=i+1;j<n;j++) mas[j]=mas[j+1];
stx
6 / 6 / 0
Регистрация: 17.09.2012
Сообщений: 93
09.02.2014, 17:10  [ТС]     Поиск и удаление элементов в одномерном массиве #8
Цитата Сообщение от daslex Посмотреть сообщение
добавить после 31 строки строчку
C++
1
for (int j=i+1;j<n;j++) mas[j]=mas[j+1];
При j=i+1 удаляет следующий элемент, т.е. не тот, что нужен.
При j=i работает только для не идущих подряд элементов.
daslex
1259 / 504 / 104
Регистрация: 02.08.2011
Сообщений: 2,554
09.02.2014, 17:38     Поиск и удаление элементов в одномерном массиве #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int count=0;
//ищем нужный элемент
    for (int i=0;i<n;i++){
       if (mas[i]!=elem){
        mass[count]=mas[i];
        count++;
       }
    }
 
////////////////////
//выведем обработанный массив
    cout << "\nMassiv 2: ";
    for(i=0; i<count; i++) //тут не N, а count теперь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2014, 18:10     Поиск и удаление элементов в одномерном массиве
Еще ссылки по теме:

C++ Поиск произведения элементов в заданном диапазоне в одномерном массиве
C++ Поиск суммы элементов в диапазоне [1;15] в одномерном массиве
C++ Удаление и замена элементов в одномерном массиве
C++ Поиск элемента в одномерном целочисленном массиве
C++ Поиск максимального количества одинаковых элементов в одномерном массиве

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

Или воспользуйтесь поиском по форуму:
stx
6 / 6 / 0
Регистрация: 17.09.2012
Сообщений: 93
09.02.2014, 18:10  [ТС]     Поиск и удаление элементов в одномерном массиве #10
Теперь работает, спасибо!
Yandex
Объявления
09.02.2014, 18:10     Поиск и удаление элементов в одномерном массиве
Ответ Создать тему
Опции темы

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