Как удалить элемент из массива структур с
C++
Фамилия(char[])
Имя(char[])
Отчество(char[])
Год рождения(int)
Заработная плата(double)
Создать тип данных «структура» с вышеперечисленными полями.
Написать программу создающую массив структур.Обеспечить демонстрацию возможности записи,чтения,добавления и удаления структур.
Помогите как удалить структуру .
#include #include #include struct WORKER ; void f1(WORKER *wr,int count) >wr ->familiya; cout>wr->name; cout>wr->otchestvo; cout>wr->data; cout>wr->pay; > void main() >n; int count=0; while(count
Последний раз редактировалось Infini; 02.03.2013 в 18:17 .
Регистрация: 08.04.2012
Сообщений: 3,229
Удалить структуру в массиве можно двумя способами (каждый из них имеет варианты):
1. Пометить элемент массива как удаленный:
1.1. Для чего завести отдельное поле.
1.2. Для чего использовать одно из существующих полей с недопустимым значением (например, первый символ фамилии — точка).
2. Физически удалить запись, сократив размер использованной части массива на 1.
2.1. Сдвинуть на одну запись «хвост» массива.
2.2. Переместить последний элемент на место удаляемого.
Регистрация: 02.03.2013
Сообщений: 8
Сообщение от s-andriano
Удалить структуру в массиве можно двумя способами (каждый из них имеет варианты):
1. Пометить элемент массива как удаленный:
1.1. Для чего завести отдельное поле.
1.2. Для чего использовать одно из существующих полей с недопустимым значением (например, первый символ фамилии — точка).
2. Физически удалить запись, сократив размер использованной части массива на 1.
2.1. Сдвинуть на одну запись «хвост» массива.
2.2. Переместить последний элемент на место удаляемого.
спасибо уже разобралась
Удаление структуры из массива структур
Удаление динамической структуры структур
Здравствуйте! Есть две структуры: struct TRow < int m; double *elem; >; struct.
Удаление из массива структур
Добрый вечер, глубокой ночью, когда самая пора писать работы, в голову приходят разнообразные.
Удаление структур из массива
нужна функция, которая бы удаляла нужный элемент массива структур, но я совершенно не имею.
Удаление динамического массива структур
Если удалять массив структур как обычно пишут, то при запросе следующей структуры из массива на.
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
что вы подразумеваете под удалением? и для того, что бы понять как удалить, нужно видеть как создаёте. в общем инфы мало, давайте весь код, так будет проще.
Регистрация: 02.12.2012
Сообщений: 35
Сообщение от l_a_m
давайте весь код, так будет проще.
Весь код слишком длинный, написал маленький пример..
А это разве не заполнение?
Под удалением подразумевается удаление структуры под опр. номером. Допустим WORKER[6]
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
что такое WORKER и как он создаётся?
Сообщение от Ghoster
удаление структуры под опр. номером
без сдвига данных на удаленную область?
Регистрация: 02.12.2012
Сообщений: 35
Сообщение от l_a_m
что такое WORKER и как он создаётся?
Worker это и есть структура, создающаяся в первой (точнее 2) строчке.
Сообщение от l_a_m
без сдвига данных на удаленную область?
Можно и без сдвига, т.к. данные заносятся в файл, откуда потом считываются по порядку
если не обязательно освобождать память? то почему бы просто не зделать так?
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
#include typedef struct { std::string s1; std::string s2; std::string s3; } col; const size_t size = 3; int main() { setlocale(LC_ALL, "Russian"); col *arr = new col[size]; for (int i = 0; i size; i++) { std::getline(std::cin, arr[i].s1); std::getline(std::cin, arr[i].s2); std::getline(std::cin, arr[i].s3); } int number; std::cout <"Какую уструктуру удалить?"; std::cin >> number; for (int i = 0; i size; i++) { if (i != number)std::cout [ i].s1 <' ' [ i].s2 <' ' [ i].s3 :: endl; } return 0; }
Меню пользователя @ Belfegor |
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
во 2-й строчке она заполняется, а я спрашиваю как и где она создаётся, это разные вещи!
Добавлено через 1 минуту
Сообщение от Belfegor
Удаление n-ого элемента структуры c#
Вот структура которая состоит из имени и возраста человека. Как из нее удалить n-ый элемент и вывести структуру уже без него? Или можно только создать новую структуру и скопировать в нее все кроме n элемента?
public struct mans < public string name; public int age; public mans(string _name, int _age) : this() < this.name = _name; this.age = _age; >> static void Main(string[] args) < Listman = new List(); int m = 4; for(int i=0; i); man.Add(new mans(wrMan[0], Convert.ToInt32(wrMan[1]))); > for(int i=0; i int n=Convert.ToInt32(Console.ReadLine()); >
Отслеживать
задан 20 фев 2022 в 16:59
131 9 9 бронзовых знаков
А при чем тут вообще структура? И почему из нее удалить , если у вас не в структуре данные, а в простой коллекции. mans у вас ведь «один человек», а не список. Берите значит и удаляйте man.RemoveAt(0) или man.Remove(объект) . Достаточно ведь поставить точку и посмотреть какие есть методы, либо нажать на тип и прожать клавишу F1 на клавиатуре, вам сразу откроется документация по нему, со всеми методами и описанием.
20 фев 2022 в 17:06
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Все смешалось. кони. люди.
- Структура — это данные об одном человеке, так? Почему вы назвали этот тип mans ? Ведь в переводе на русский было бы mans — это «люди», но нет такого слово в английском, есть people «люди» и men — «мужики». Если имеется в виду человек, персона, то и назовите тип Person . В C# типы — структуры и классы называют с большой буквы.
Структура будет выглядеть так.
public struct Person < public string name; public int age; public Person(string _name, int _age) < name = _name; age = _age; >>
- List man — список типа «мужики» вы называете «мужик», даже если не учитывать трудности перевода, все должно быть наоборот. Назовите persons .
- Convert.ToString(Console.ReadLine()); преобразование string в string , это как закрашивать синее пятно синей ручкой в тетради. Совершенно бесполезно. Не втыкайте в код преобразования без причны.
- Взаимодействуйте с пользователем, пишите ему, что надо делать. В противном случае можете сами же запутаться, забыв, на каком этапе сейчас выполнение кода.
- Разбивайте код на методы. Вам ведь нужно вывести элементы, затем удалить из списка элемент и затем посмотреть изменения, так? Чтобы не писать один и тот же код дважды, создайте метод.
static void Main(string[] args) < Console.Write("Сколько всего элементов: "); int count = int.Parse(Console.ReadLine()); Listpersons = new List(); for (int i = 0; i < count; i++) < Console.Write($"Введите элемент []: "); string input = Console.ReadLine(); string[] tokens = input.Split(); persons.Add(new Person(tokens[0], int.Parse(tokens[1]))); > Console.WriteLine(); PrintPersons(persons); Console.Write($"Индекс элемента для удаления (от 0 до ): "); int n = int.Parse(Console.ReadLine()); persons.RemoveAt(n); Console.WriteLine(); PrintPersons(persons); > private static void PrintPersons(List persons) < Console.WriteLine($"Всего элементов: "); for (int i = 0; i < persons.Count; i++) < Console.WriteLine($""); > Console.WriteLine(); >
Так код легче читается?
Вывод в консоль
Сколько всего элементов: 3 Введите элемент [0]: Вася 10 Введите элемент [1]: Федя 12 Введите элемент [2]: Настя 28 Всего элементов: 3 Вася 10 Федя 12 Настя 28 Индекс элемента для удаления (от 0 до 2): 1 Всего элементов: 2 Вася 10 Настя 28
Как удалить запись из структуры?
Не могу сделать удаление книги, нужно вводить название с клавиатуры, и еще прошу помочь с заданием: по запросу выводится информация о книгах, изданных после года, введенного с клавиатуры. Буду благодарен помощи, никак не могу решить
- Вопрос задан более двух лет назад
- 856 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1
Wataru @wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
В чем проблема? Не можете сделать ввод названия с клавиатуры? Скопируйте код с готовой функции make().
Для удаления надо пройтись по всему списку — это уже делается в функции main при выводе библиотеки (кстати, там не нужен pLibrary. Можно совместить цикл while и цикл for после него. Вы проходитесь циклом по элементам списка, кладете их в массив и потом проходитесь по массиву. Достаточно просто делать с ними, что вам надо прямо в первом цикле).
Потом, вместо вывода сравнивайте название текущей книги с введенным с клавиатуры (функция strcmp). Если совпало, то надо предыдущему элементу в next присвоить next текущей записи и потом вызвать free() от текущей записи и вывалиться из цикла через break.
Да, единственная сложность — надо поддерживать указатель на предыдущую запись, а лучше даже на next у предыдущей записи (это будет LIBRARY**). Тогда для удаления надо просто head->next записать туда и текущий элемент выпадет из списка. Перед переходом к следующему элементу в цикле while просто перезапишите этот указатель на &head->next. Изначально он должен быть &head. Таким образом можно удалить даже первый элемент списка без разбора случаев.