Сортировка через qsort - C (СИ)

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

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

Вывести статистику появления символов на экран, все работает, но сказали улучшить сортировку, подскажите как сделать ее через qsort, пожалуйста
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
#define N 224 //количество символов в таблице ANSII начиная с пробела
 
int main()
{
    setlocale(LC_ALL, "RUS");
    FILE *f1; 
    
    if (!(f1 = fopen("C:\\Users\\user\\Desktop\\source.txt", "r"))) {
        fprintf(stderr, "Error opening file");
        getch();
        exit(1);
    }
 
    int i, c, A[N][2], x = 32;
    for (i = 0; i < N; ++i, ++x) {//создаем двумерный массив,в первом столбце символы ANSII начиная с 32-го,т.е. с пробела
        A[i][0] = x; //во второй будем заносить количество появлений в тексте данного символа
        A[i][1] = 0;
    }
    while ((c = fgetc(f1)) != EOF) 
    {
        checkchar(c, A);
    }
    for (i = 0; i < N - 1; ++i)//сортируем на убывание
    for (int j = N - 2; j >= i; --j)
    if (A[j][1] < A[j + 1][1]) {
        for (int m = 1; m >= 0; --m) {
            c = A[j][m];
            A[j][m] = A[j + 1][m];
            A[j + 1][m] = c;
        }
    }
    for (i = 0; i < N; ++i)
    if (A[i][1] != 0)
        printf("%c %d\n", A[i][0], A[i][1]);
    fclose(f1);
    getch();
    return 0;
}
int checkchar(int c, int A[N][2])
{
    int i;
    for (i = 0; i < N; ++i) {
        if (c == A[i][0])
            A[i][1]++;
    }
    return 0;
}
int  sort()
{
 
}

Решение задачи: «Сортировка через qsort»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
 
#define N 256
 
int main(void)
{
    setlocale(LC_CTYPE, "");
    FILE *f1; 
    f1 = fopen("source.txt", "r");
    if (f1 == NULL) {
        fprintf(stderr, "Error opening file");
        getchar();
        exit(1);
    }
    int a[N];
    memset(a, 0, sizeof(a));
    int c;
    while ((c = fgetc(f1)) != EOF) a[c]++;
 
    for (int i = 0; i < N; ++i)
        if (a[i] != 0)
            printf("%c : %d \n", i, a[i]);
 
    fclose(f1);
    getchar();
}

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

  1. Подключение необходимых библиотек
  2. Объявление массива переменной длины
  3. Открытие файла для чтения
  4. Инициализация массива под 0
  5. Чтение файла построчно и подсчет символов
  6. Вывод результатов на экран
  7. Закрытие файла
  8. Получение символа от пользователя для проверки корректности работы программы
  9. Выход из программы с ошибкой при неправильном открытии файла
  10. Выход из программы при закрытии файла без ошибок

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


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

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

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