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

Удалить элементы из структуры - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.95
Mischanja
Всегда не хватает времени
 Аватар для Mischanja
117 / 117 / 7
Регистрация: 15.10.2009
Сообщений: 493
29.06.2011, 17:33     Удалить элементы из структуры #1
Дали вот такое задание на С++
1. сделать Структура "Владелец автомобиля":
- Фамилия, имя, отчество;
- Номер автомобиля;
- Номер техпаспорта;
- Отделение регистрации ГАИ.
2. Удалить элемент с указанным номером авто,
3. добавить 2 элемента перед элементом с указанным именем.

первое я сделал без проблем а вот во вторым и третьим не разберусь никак

Вот мой код, где функция deleted пытается удалить запись из структуры но что-то ничего из этого не вышло.

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream.h>
#include <string.h>
#include <conio.h>
 
struct Auto
{
    char* name;
    char* number;
    char* otdel;
    char* tehnumber;
};
 
void input(Auto& Obj)
{
    const int max_size=200;
    char str[max_size];
    cout<<"Введите Имя и Фамилию\n";
    cin.getline(str, max_size);
    Obj.name=new char[strlen(str)+1];
    strcpy(Obj.name, str);
    cout<<"Введите номер машины\n";
    cin.getline(str, max_size);
    Obj.number=new char[strlen(str)+1];
    strcpy(Obj.number, str);
    cout<<"Введите отдел регистрации ДАИ\n";
    cin.getline(str, max_size);
    Obj.otdel=new char[strlen(str)+1];
    strcpy(Obj.otdel, str);
    cout<<"Введите номер тех паспорта\n";
    cin.getline(str, max_size);
    Obj.tehnumber=new char[strlen(str)+1];
    strcpy(Obj.tehnumber, str);
    cout<<'\n';
    cin.get();
}
 
void output(Auto& Obj)
{
    cout<<"Фамилия Имя Отчество: "<< Obj.name <<'\n'
        <<"Номер машины: "<< Obj.number <<'\n'
        <<"Отдел регистрации ДАИ: "<< Obj.otdel <<'\n'
        <<"Номер тех паспорта: "<< Obj.tehnumber <<'\n';
    cout<<'\n';
}
 
void deleted(Auto* Obj, int n)
{
    int cnt=0;
 
    const int size_find_str=7;
    const char str[size_find_str]="123QWE";
    for(int i=0; i<n; ++i)
    {
        if(!(strcmp(Obj[i].number, str)))
        {
            Obj[i].name=Obj[i+1].name;
            Obj[i].number=Obj[i+1].number;
            Obj[i].otdel=Obj[i+1].otdel;
            Obj[i].tehnumber=Obj[i+1].tehnumber;
            ++cnt;
        }
    }
    if (cnt==0)
    {
        cout<<"Нет информации о водителях с номером "<<str;
    }
}
 
int main()
{       clrscr();
    const int size=2;
    Auto* AuArr;
    AuArr=new Auto[size];
    for(int i=0; i<size; ++i)
    {
        cout<<"Введите информацию о "<< i+1 <<" водителе\n";
        input(AuArr[i]);
    }
    for( i=0; i<size; ++i)
    {
        cout<<"Информация о "<< i+1 <<" водителе\n";
        output(AuArr[i]);
    }
 
    deleted(AuArr, size);
 
    cout<<"Архив водителей:\n";
    for( i=0; i<size; ++i)
    {
        cout<<"Информация о "<< i+1 <<" водителей\n";
        output(AuArr[i]);
    }
 
    delete[] AuArr;
    getch();
    return 0;
}
получилось что и-тый элемент просто стал равен и+1 элементу. а вот как вообще удалить его я не пойму. и потом еще добавить два после указанной фамилии
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2011, 17:33     Удалить элементы из структуры
Посмотрите здесь:

C++ Отсортировать элементы масс. структуры
C++ если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном случае-удалить отрицательные элементы.после удален
C++ дописать ( Из массива А удалить все элементы, которые встречаются в В ровно 2 раза. Из В переписать в С те элементы, которые совпадают с оставшимися)
Упорядочить элементы структуры C++
C++ Из множества отрезков плоскости удалить вертикальные (динамические структуры данных)
Как удалить 3 элемента структуры C++
C++ Удалить из массива, в котором все элементы различны, максимальный и минимальный элементы
Удалить запись из структуры C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
29.06.2011, 18:04     Удалить элементы из структуры #2
Вот быстро набросал алгоритм удаления, работая с вектором структур
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>
#include <vector>
#include <string>
 
 struct Person
 {
     std::string Name;
     int Age;
 };
 
int main()
{
    std::vector < Person > PerVector ( 3 );
 
    PerVector [ 0 ].Name = "Max";    PerVector [ 0 ].Age = 18;
    PerVector [ 1 ].Name = "Alex";   PerVector [ 1 ].Age = 15;
    PerVector [ 2 ].Name = "Valera"; PerVector [ 2 ].Age = 20;
 
    for ( int index = 0; index < PerVector.size(); index++ )
        std::cout << PerVector [ index ].Name << "  " << PerVector [ index ].Age << std::endl;
 
    // Удаляем 1 - го
    int Deleted = 0;
    PerVector.erase ( PerVector.begin() + Deleted );
 
    std::cout << std::endl;
 
    for ( int index = 0; index < PerVector.size(); index++ )
        std::cout << PerVector [ index ].Name << "  " << PerVector [ index ].Age << std::endl;
 
    std::cin.get();
    return 0;
}
Добавлено через 7 минут
В Вашем алгоритме нет удаления данных из базы, Вы только перезаписываете, что не хорошо. Используйте лучше динамические структуры данных, а именно - список или, может быть, вектор.
JeyKip
53 / 45 / 2
Регистрация: 23.06.2011
Сообщений: 122
30.06.2011, 16:31     Удалить элементы из структуры #3
подправил ваш алгоритм...использовал список структур....проверил, работает...вставлять в любую позицию при помощи функции списка insert...

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <list>
using namespace std;
 
struct Auto
{
        char* name;
        char* number;
        char* otdel;
        char* tehnumber;
};
 
void input(/*Auto& Obj*/list<Auto> &ls)
{
    Auto Obj;
        const int max_size=200;
        char str[max_size];
        cout<<"Введите Имя и Фамилию\n";
        cin.getline(str, max_size);
        Obj.name=new char[strlen(str)+1];
        strcpy(Obj.name, str);
        cout<<"Введите номер машины\n";
        cin.getline(str, max_size);
        Obj.number=new char[strlen(str)+1];
        strcpy(Obj.number, str);
        cout<<"Введите отдел регистрации ДАИ\n";
        cin.getline(str, max_size);
        Obj.otdel=new char[strlen(str)+1];
        strcpy(Obj.otdel, str);
        cout<<"Введите номер тех паспорта\n";
        cin.getline(str, max_size);
        Obj.tehnumber=new char[strlen(str)+1];
        strcpy(Obj.tehnumber, str);
        ls.push_back(Obj);
        cout<<'\n';
        cin.get();
}
 
void output(/*Auto& Obj*/list<Auto>::iterator it)
{
        cout<<"Фамилия Имя Отчество: "<< (*it).name <<'\n'
                <<"Номер машины: "<< (*it).number <<'\n'
                <<"Отдел регистрации ДАИ: "<< (*it).otdel <<'\n'
                <<"Номер тех паспорта: "<< (*it).tehnumber <<'\n';
        cout<<'\n';
}
 
void deleted(/*Auto* Obj*/list<Auto> &ls, int n)
{
        int cnt=0;
        list<Auto>::iterator it = ls.begin();
        const int size_find_str=7;
        const char str[size_find_str]="123QWE";
        for(int i=0; i<n; ++i)
        {
                if((strcmp((*it).number, str)) == 0)
                {
                    ls.erase(it);
                    ++cnt;
                    break;
                        /*Obj[i].name=Obj[i+1].name;
                        Obj[i].number=Obj[i+1].number;
                        Obj[i].otdel=Obj[i+1].otdel;
                        Obj[i].tehnumber=Obj[i+1].tehnumber;
                        ++cnt;*/
                }else
                {
                    it++;
                    
                }
        }
        if (cnt==0)
        {
                cout<<"Нет информации о водителях с номером "<<str;
        }
}
 
int main()
{       clrscr();
    setlocale(0,"");
        const int size=2;
        list<Auto> auto_list;
        list<Auto>::iterator it = auto_list.begin();
        //Auto* AuArr;
        //AuArr=new Auto[size];
        for(int i=0; i<size; ++i)
        {
                cout<<"Введите информацию о "<< i+1 <<" водителе\n";
                input(/*AuArr[i]*/auto_list);
        }
 
        it = auto_list.begin();
        for(int i=0; i<auto_list.size(); ++i)
        {
                cout<<"Информация о "<< i+1 <<" водителе\n";
                output(/*AuArr[i]*/it);
                it++;
        }
 
        deleted(auto_list, size);
 
        cout<<"Архив водителей:\n";
        it = auto_list.begin();
        for(int i=0; i<auto_list.size(); ++i)
        {
                cout<<"Информация о "<< i+1 <<" водителе\n";
                output(/*AuArr[i]*/it);
                it++;
        }
 
        //delete[] AuArr;
        getch();
        return 0;
}
Добавлено через 2 минуты
не обновил страницу, не видел сообщения от Михаила...но надеюсь, что тоже был чем-то полезен..))

Добавлено через 22 часа 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <list>
using namespace std;
 
struct Auto
{
        char* name;
        char* number;
        char* otdel;
        char* tehnumber;
};
 
void input(/*Auto& Obj*/list<Auto> &ls)
{
        Auto Obj;
        const int max_size=200;
        char str[max_size];
        cout<<"Введите Имя и Фамилию\n";
        cin.getline(str, max_size);
        Obj.name=new char[strlen(str)+1];
        strcpy(Obj.name, str);
        cout<<"Введите номер машины\n";
        cin.getline(str, max_size);
        Obj.number=new char[strlen(str)+1];
        strcpy(Obj.number, str);
        cout<<"Введите отдел регистрации ДАИ\n";
        cin.getline(str, max_size);
        Obj.otdel=new char[strlen(str)+1];
        strcpy(Obj.otdel, str);
        cout<<"Введите номер тех паспорта\n";
        cin.getline(str, max_size);
        Obj.tehnumber=new char[strlen(str)+1];
        strcpy(Obj.tehnumber, str);
                ls.push_back(Obj);
        cout<<'\n';
        cin.get();
}
 
void output(/*Auto& Obj*/list<Auto>::iterator it)
{
        cout<<"Фамилия Имя Отчество: "<< (*it).name <<'\n'
                <<"Номер машины: "<< (*it).number <<'\n'
                <<"Отдел регистрации ДАИ: "<< (*it).otdel <<'\n'
                <<"Номер тех паспорта: "<< (*it).tehnumber <<'\n';
        cout<<'\n';
}
 
void insert_new (list<Auto> &ls, char *name, Auto driver_info)
{
    bool yes = false;
    int position = 0;
    list<Auto>::iterator it = ls.begin();
    for (it = ls.begin(); it != ls.end(); it++)
    {
        if (strcmp((*it).name, name) == 0)
        {
            yes = true;
            break;
        }
    }
        if (yes)
            ls.insert(it,driver_info);
        else cout<<"Нет в бвзе водителей с именем "<<name<<endl;
}
 
void deleted(/*Auto* Obj*/list<Auto> &ls, int n)
{
        int cnt=0;
                list<Auto>::iterator it = ls.begin();
        const int size_find_str=7;
        const char str[size_find_str]="123QWE";
        for(int i=0; i<n; ++i)
        {
                if((strcmp((*it).number, str)) == 0)
                {
                                        ls.erase(it);
                                        ++cnt;
                                        break;
                        /*Obj[i].name=Obj[i+1].name;
                        Obj[i].number=Obj[i+1].number;
                        Obj[i].otdel=Obj[i+1].otdel;
                        Obj[i].tehnumber=Obj[i+1].tehnumber;
                        ++cnt;*/
                }else
                                {
                                        it++;
                                        
                                }
        }
        if (cnt==0)
        {
                cout<<"Нет информации о водителях с номером "<<str;
        }
}
 
int main()
{       clrscr();
        setlocale(0,"");
        const int size=2;
                list<Auto> auto_list;
                list<Auto>::iterator it = auto_list.begin();
        //Auto* AuArr;
        //AuArr=new Auto[size];
        for(int i=0; i<size; ++i)
        {
                cout<<"Введите информацию о "<< i+1 <<" водителе\n";
                input(/*AuArr[i]*/auto_list);
        }
 
                it = auto_list.begin();
        for(int i=0; i<auto_list.size(); ++i)
        {
                cout<<"Информация о "<< i+1 <<" водителе\n";
                output(/*AuArr[i]*/it);
                                it++;
        }
 
        deleted(auto_list, size);
 
        /*Здесь я просто добавлю информацию о новом человеке для тестирования*/
        Auto driver;
        driver.name = "Evgeniy";
        driver.number = "1234AN";
        driver.otdel = "Petrovka";
        driver.tehnumber = "98264";
        /*Конец записи. Теперь пробуем вставить перед Иваном*/
        insert_new(auto_list, "Ivan", driver);
        cout<<"Архив водителей:\n";
                it = auto_list.begin();
        for(int i=0; i<auto_list.size(); ++i)
        {
                cout<<"Информация о "<< i+1 <<" водителе\n";
                output(/*AuArr[i]*/it);
                                it++;
        }
 
        //delete[] AuArr;
        getch();
        return 0;
}
Yandex
Объявления
30.06.2011, 16:31     Удалить элементы из структуры
Ответ Создать тему
Опции темы

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