Сортировка массива структур по полю - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Условие:
Для книг, хранящихся в библиотеке, задаются регистрационный номер книги, автор, название, год издания, издательство, количество страниц. Вывести список книг с фамилиями авторов в алфавитном порядке, изданных после заданного года.
Нужно отсортировать массив структур по одному полю (по "фамилия автора"). Использую сортировку пузырьком. Не могу придумать, как поменять местами номера элементов в структуре (library[j] и library[j+1])... Вылазят следующие ошибки:
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.
Пример моей реализации (с ошибками):
Листинг программы
  1. #include <iostream.h>
  2. #include <string.h>
  3. int main() {
  4. int i,j,n;
  5. struct strc { // Создаем структуру с требуемыми полями
  6. int number;
  7. char author[100];
  8. char title[100];
  9. int year;
  10. char publisher[100];
  11. int pages;
  12. };
  13. cout << "Enter the number of books: "; cin >> n; // Вводим требуемый размер
  14. cout << endl;
  15. strc *library = new strc[n]; // Динамически создаем массив структур
  16. strc *tmp = new strc[0]; // Временная структура (причина ошибки?)
  17. for(i=0;i<n;i++) { // Заполняем массив структур
  18. cout << "Book number " << i+1 << endl;
  19. cout << "Registration number: "; cin >> library[i].number;
  20. cout << "Author: "; cin >> library[i].author;
  21. cout << "Title: "; cin >> library[i].title;
  22. cout << "Year: "; cin >> library[i].year;
  23. cout << "Publisher: "; cin >> library[i].publisher;
  24. cout << "Pages: "; cin >> library[i].pages;
  25. cout << endl;
  26. }
  27. for(i=0;i<n-1;i++) { // Сортировка массива структур по строке с именем автора
  28. for(j=0;j<n-1;j++) {
  29. if (strcmp(library[j+1].author,library[j].author) > 0) {
  30. tmp = library[j+1]; // Тут ошибка
  31. library[j+1] = library[j];
  32. library[j] = tmp; // И тут ошибка
  33. }
  34. /* Тут будет вывод */
  35. delete []library;
  36. return 0;
  37. }
Учусь на первом курсе и работаю в Visual C++ 6.0, строго не судите. Заранее большое спасибо!

Решение задачи: «Сортировка массива структур по полю»

textual
Листинг программы
  1. {tmp = library[i];
  2. library[i] = library[j];
  3. library[j] = tmp;
  4. }

Объяснение кода листинга программы

В представленном коде выполняется сортировка массива структур по полю. Однако, для полноценного понимания необходимо знать контекст, в котором используется данный код. Список действий:

  1. Создается временная переменная tmp типа, соответствующего типу элементов массива library.
  2. В tmp записывается значение элемента массива library с индексом i.
  3. Значение элемента массива library с индексом i заменяется на значение элемента массива library с индексом j.
  4. Значение элемента массива library с индексом j заменяется на значение временной переменной tmp. Таким образом, происходит перестановка элементов массива library таким образом, что элемент с нужным значением поля перемещается на нужную позицию в массиве. Поскольку код представлен без контекста, точные значения переменных i, j и tmp неизвестны. Также неизвестно, какая именно структура сортируется и по какому полю происходит сортировка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы