Сортировка массива структур по полю - 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
неизвестны. Также неизвестно, какая именно структура сортируется и по какому полю происходит сортировка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д