Сортировка массива структур по полю - 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.
Пример моей реализации (с ошибками):
#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;
}
Учусь на первом курсе и работаю в Visual C++ 6.0, строго не судите. Заранее большое спасибо!

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

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

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

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

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

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


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

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

5   голосов , оценка 4 из 5
Похожие ответы