Сортировка массива структур по полю - C (СИ)
Формулировка задачи:
Здравствуйте!
Условие:
Нужно отсортировать массив структур по одному полю (по "фамилия автора"). Использую сортировку пузырьком. Не могу придумать, как поменять местами номера элементов в структуре (library[j] и library[j+1])... Вылазят следующие ошибки:
Пример моей реализации (с ошибками):
Учусь на первом курсе и работаю в Visual C++ 6.0, строго не судите.
Заранее большое спасибо!
Для книг, хранящихся в библиотеке, задаются регистрационный номер книги, автор, название, год издания, издательство, количество страниц. Вывести список книг с фамилиями авторов в алфавитном порядке, изданных после заданного года.
error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct main::strc' (or there is no acceptable conversion)
error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct main::strc *' (or there is no acceptable conversion)
fatal error C1004: unexpected end of file found
Error executing cl.exe.
#include <iostream.h> #include <string.h> int main() { int i,j,n; struct strc { // Создаем структуру с требуемыми полями int number; char author[100]; char title[100]; int year; char publisher[100]; int pages; }; cout << "Enter the number of books: "; cin >> n; // Вводим требуемый размер cout << endl; strc *library = new strc[n]; // Динамически создаем массив структур strc *tmp = new strc[0]; // Временная структура (причина ошибки?) for(i=0;i<n;i++) { // Заполняем массив структур cout << "Book number " << i+1 << endl; cout << "Registration number: "; cin >> library[i].number; cout << "Author: "; cin >> library[i].author; cout << "Title: "; cin >> library[i].title; cout << "Year: "; cin >> library[i].year; cout << "Publisher: "; cin >> library[i].publisher; cout << "Pages: "; cin >> library[i].pages; cout << endl; } for(i=0;i<n-1;i++) { // Сортировка массива структур по строке с именем автора for(j=0;j<n-1;j++) { if (strcmp(library[j+1].author,library[j].author) > 0) { tmp = library[j+1]; // Тут ошибка library[j+1] = library[j]; library[j] = tmp; // И тут ошибка } /* Тут будет вывод */ delete []library; return 0; }
Решение задачи: «Сортировка массива структур по полю»
textual
Листинг программы
{tmp = library[i]; library[i] = library[j]; library[j] = tmp; }
Объяснение кода листинга программы
В представленном коде выполняется сортировка массива структур по полю. Однако, для полноценного понимания необходимо знать контекст, в котором используется данный код. Список действий:
- Создается временная переменная
tmp
типа, соответствующего типу элементов массиваlibrary
. - В
tmp
записывается значение элемента массиваlibrary
с индексомi
. - Значение элемента массива
library
с индексомi
заменяется на значение элемента массиваlibrary
с индексомj
. - Значение элемента массива
library
с индексомj
заменяется на значение временной переменнойtmp
. Таким образом, происходит перестановка элементов массиваlibrary
таким образом, что элемент с нужным значением поля перемещается на нужную позицию в массиве. Поскольку код представлен без контекста, точные значения переменныхi
,j
иtmp
неизвестны. Также неизвестно, какая именно структура сортируется и по какому полю происходит сортировка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д