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

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

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

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

29.06.2011, 17:33. Просмотров 3748. Ответов 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 элементу. а вот как вообще удалить его я не пойму. и потом еще добавить два после указанной фамилии
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2011, 17:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить элементы из структуры (C++):

C++. Списки. Необходимо удалить элементы структуры. Не могу найти ошибку - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void EnterF(int **matrix_connect,int number_of_peak); void...

Удалить запись из структуры - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstring&gt; using namespace std; struct patient{ int id; char...

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

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

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

если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном случае-удалить отрицательные элементы.после удален - 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 минут
В Вашем алгоритме нет удаления данных из базы, Вы только перезаписываете, что не хорошо. Используйте лучше динамические структуры данных, а именно - список или, может быть, вектор.
1
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;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 16:31
Привет! Вот еще темы с ответами:

Из целочисленного массива Х все четные элементы записать в массив Y. Удалить в массивах максимальные элементы - C++
Из целочисленного массива Х(N) все четные элементы записать в массив Y(k). Удалить в массивах максимальные элементы. В программе написать...

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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