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

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

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

#include <stdio.h>
 #include <stdlib.h>
#include <string.h>
 
 typedef struct person_t {
    char * name;
    int phone;
 } person_t;
 
 int namecmp(const void* a, const void* b);
 int phonecmp(const void* a, const void* b);
 
 int main(void)
 {
    char name[1000];
    person_t *base;
    int n, i, phone;
    scanf("%d", &n);
    base = malloc(n * sizeof(person_t));
 
    /* Считываем телефонную базу */
    for(i = 0 ; i < n ; i++)
    {
        scanf("%s%d", name, &phone);
        /* Выделяем память под массив base[i].name,
                      учитывая символ конца строки */
        base[i].name = malloc((strlen(name)+1) * sizeof(char));
        strcpy(base[i].name, name);
        base[i].phone = phone;
    }
 
    qsort(base, n, sizeof(person_t), namecmp);
    /* Напечатаем в алфавитном порядке */
    for(i = 0 ; i < n ; i++)
    {
        printf("%20s %d\n", base[i].name, base[i].phone);
    }

    qsort(base, n, sizeof(person_t), phonecmp);
    /* Напечатаем в порядке возрастания номеров*/
    for(i = 0 ; i < n ; i++)
    {
        printf("%20s %d\n", base[i].name, base[i].phone);
    }
 
    /* Освобождаем выделенную память */

    for(i = 0 ; i < n ; i++)
    {
        free(base[i].name);
    }
    free(base);
 
    return 0;
 
 }
 
 int namecmp(const void* a, const void* b)
 {
     person_t *pa = a;
     person_t *pb = b;
     return strcmp(pa->name, pb->name);
 }
 int phonecmp(const void* a, const void* b)
 {
     person_t *pa = a;
     person_t *pb = b;
     return pa->phone - pb->phone;
 }
В начале проблемы с выделением динамической памяти для base В чем ошибка?
Да, программа сортировки телефонного списка по алфавиту с использованием структур

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

textual
Листинг программы
#include <stdio.h>
 #include <stdlib.h>
#include <string.h>
 
 typedef struct person_t {
    char * name;
    int phone;
 } person_t;
 
 int namecmp(const void* a, const void* b);
 int phonecmp(const void* a, const void* b);
 
 int main(void)
 {
    char name[1000];
    person_t *base;
    int n, i, phone;
    scanf("%d", &n);
    base = malloc(n * sizeof(person_t));
 
    /* Считываем телефонную базу */
    for(i = 0 ; i < n ; i++)
    {
        scanf("%s%d", name, &phone);
        /* Выделяем память под массив base[i].name,
                      учитывая символ конца строки */
        base[i].name = malloc((strlen(name)+1) * sizeof(char));
        strcpy(base[i].name, name);
        base[i].phone = phone;
    }
 
    qsort(base, n, sizeof(person_t), namecmp);
    /* Напечатаем в алфавитном порядке */
    for(i = 0 ; i < n ; i++)
    {
        printf("%20s %d\n", base[i].name, base[i].phone);
    }
 
 
    qsort(base, n, sizeof(person_t), phonecmp);
    /* Напечатаем в порядке возрастания номеров*/
    for(i = 0 ; i < n ; i++)
    {
        printf("%20s %d\n", base[i].name, base[i].phone);
    }
 
    /* Освобождаем выделенную память */
 
 
    for(i = 0 ; i < n ; i++)
    {
        free(base[i].name);
    }
    // free(base);
 
    return 0;
 
 }
 
 int namecmp(const void* a, const void* b)
 {
     person_t *pa = (person_t*)a;
     person_t *pb = (person_t*)b;
     return strcmp(pa->name, pb->name);
 }
 int phonecmp(const void* a, const void* b)
 {
     person_t *pa = (person_t*)a;
     person_t *pb = (person_t*)b;
     return pa->phone - pb->phone;
 }

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

В этом коде используется язык программирования C для сортировки телефонного списка по алфавиту и номеру телефона. Список переменных и их значения:

  1. n - переменная для хранения количества элементов в списке телефонных номеров.
  2. i, j - индексы для прохода по списку.
  3. name - массив для хранения имени.
  4. phone - переменная для хранения номера телефона.
  5. base - динамический массив для хранения структуры person_t.
  6. person_t - структура для хранения имени и номера телефона.
  7. namecmp, phonecmp - функции сравнения для сортировки по имени и номеру телефона соответственно. Код выполняет следующие действия:
  8. Запрашивает у пользователя количество элементов в списке.
  9. Выделяет память под список структур person_t.
  10. Считывает данные о имени и номере телефона для каждого элемента списка.
  11. Сортирует список по имени с помощью функции qsort и функции сравнения namecmp.
  12. Выводит отсортированный список на экран.
  13. Сортирует список по номеру телефона с помощью функции qsort и функции сравнения phonecmp.
  14. Выводит отсортированный список на экран.
  15. Освобождает выделенную память. Пользователь может добавить, изменить или удалить элементы списка, используя функции malloc и free для динамического выделения памяти.

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


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

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

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