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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.95
Mischanja
Всегда не хватает времени
118 / 118 / 7
Регистрация: 15.10.2009
Сообщений: 493
#1

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

29.06.2011, 17:33. Просмотров 3585. Ответов 2
Метки нет (Все метки)

Дали вот такое задание на С++
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++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstring&gt; using namespace std; struct patient{ int id; char...

Удалить элемент структуры - C++
нужно придумать структуру, вывести структуру и удалить элемент,спасибо большое зарание

Удалить запись из структуры - C++
Помогите, пожалуйста, переделать функцию DeleteAuto. Она работает не правильно. Желательно без векторов и т.д. Сам код: ...

Удалить из массива, в котором все элементы различны, максимальный и минимальный элементы - C++
Удалить из массива, в котором все элементы различны: а) максимальный элемент б) минимальный элемент Добавлено через 4 минуты ...

Как удалить 3 элемента структуры - C++
Создал структуру все работает.Как удалить 3 эл первых и добавить 1 перед ним дайте наводку ваше ни знаю как делать. #include&lt;stdio.h&gt; ...

Из множества отрезков плоскости удалить вертикальные (динамические структуры данных) - C++
Помогите написать программу: Дано множество отрезков плоскости S = {(X1,Y1), (X2,Y2), …, (Xn,Yn)}. Нужно удалить из этого списка...

Упорядочить элементы структуры - C++
Необходимо составить структуру, сделать сортировку по признаку, по убыванию или возрастанию... Вот код: #include &quot;stdafx.h&quot; #include...

Помогите сравнить элементы структуры - C++
Помогите решить проблему с сравниванием элементов структуры типа char #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; using...

Не заполняются элементы структуры в функции - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; using namespace std; void structadd(struct...

Отсортировать элементы структуры по алфавиту. - C++
друзья, не подскажите как отортировать элементы структуры по алфавиту???

Отсортировать элементы масс. структуры - C++
По заданию необходимо определить средний балл всей группы, для этого необходимо : опр-ть ср. балл каждого студента отфильтровать...

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
533 / 438 / 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;
}
Ответ Создать тему
Опции темы

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