Сортировка массива структур по одному из полей по алфавиту - C (СИ)

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

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

Вечер добрый. Нужна помощь в реализации сортировки массива структур(а точнее, одного поля массива) по алфавиту. Что имеем:
Листинг программы
  1. struct book
  2. {
  3. char name[15];
  4. char surname[15];
  5. char tel[15];
  6. } mybook[10];
поле name как раз и нужно отсортировать. сделал что-то подобное:
Листинг программы
  1. void Sortname(struct book *mybook, int N) // N - текущее кол-во записей в массиве
  2. {
  3. int i,j;
  4. char temp[15];
  5. for (i=1; i<N; i++)
  6. { tolower(mybook[i].name[j]);
  7. if (strncmp(mybook[i].name,mybook[i+1].name,1)>0)
  8. { strcpy(temp,mybook[i].name);
  9. strcpy(mybook[i].name,mybook[i+1].name);
  10. strcpy(mybook[i+1].name,temp);
  11. strcpy(temp,mybook[i].surname);
  12. strcpy(mybook[i].surname,mybook[i+1].surname);
  13. strcpy(mybook[i+1].surname,temp);
  14. strcpy(temp,mybook[i].tel);
  15. strcpy(mybook[i].tel,mybook[i+1].tel);
  16. strcpy(mybook[i+1].tel,temp); break; }
  17. else if ((strncmp(mybook[i].name,mybook[i+1].name,1)==0) && (strncmp(mybook[i].name,mybook[i+1].name,2)>0))
  18. { strcpy(temp,mybook[i].name);
  19. strcpy(mybook[i].name,mybook[i+1].name);
  20. strcpy(mybook[i+1].name,temp);
  21. strcpy(temp,mybook[i].surname);
  22. strcpy(mybook[i].surname,mybook[i+1].surname);
  23. strcpy(mybook[i+1].surname,temp);
  24. strcpy(temp,mybook[i].tel);
  25. strcpy(mybook[i].tel,mybook[i+1].tel);
  26. strcpy(mybook[i+1].tel,temp); break; }
  27. }
  28. }
но, увы, эта функция делает свое дело только после того, как её запустить несколько раз(она, походу, игнорирует то, что она запущена в цикле for ) прошу указать мне на мои ошибки и буду рад, если их мне объяснят. заранее большое спасибо.

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

textual
Листинг программы
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. #define MAX_STRING_LENGTH   32
  6. #define MAX_BOOKS       5
  7.  
  8. typedef struct {
  9.     char name[MAX_STRING_LENGTH];
  10.     char surname[MAX_STRING_LENGTH];
  11.     char tel[MAX_STRING_LENGTH];
  12. } book_t;
  13.  
  14. int sorter (const void * a, const void * b) {
  15.     return strcmp (((book_t *)a)->name, ((book_t *)b)->name) > 0;
  16. }
  17.  
  18. void book_print (book_t * b) {
  19.     printf ("name   : %s\n"
  20.              "surname: %s\n"
  21.              "tel    : %s\n",
  22.               b->name, b->surname, b->tel);
  23. }
  24.  
  25. void book_printn (book_t * b, size_t num) {
  26.     for ( ; num; --num) {
  27.         book_print (b++);
  28.         printf ("\n-----------------\n");
  29.     }
  30. }
  31.  
  32. int main()
  33. {
  34.     /*  поля заполнены от балды, потому что я не в курсе
  35.      *  что именно они должны значить
  36.      *  и вообще это больше похоже на структуру,
  37.      *  описывающую `человека'
  38.     */
  39.     book_t books[MAX_BOOKS] = {
  40.         { "The Jungle Book",    "Rudyard Kipling",  "1" },
  41.         { "Frankenstein",   "Mary Wollstonecraft",  "2" },
  42.         { "The Secret Garden",  "Frances Hodgson B",    "3" },
  43.         { "Heidi",      "Johanna Spyri",    "4" },
  44.         { "Enchiridion",    "Epictetus",        "5" }
  45.     };
  46.  
  47.     printf ("---------------- BEFORE SORT ----------------\n");
  48.     book_printn (books, MAX_BOOKS);
  49.  
  50.     // сортировка
  51.     qsort (books, MAX_BOOKS, sizeof (book_t), sorter);
  52.  
  53.     printf ("---------------- AFTER SORT -----------------\n");
  54.     book_printn (books, MAX_BOOKS);
  55.  
  56.     return 0;
  57. }

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


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

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

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

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

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

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