Сортировка через 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();
}
Объяснение кода листинга программы
- Подключение необходимых библиотек
- Объявление массива переменной длины
- Открытие файла для чтения
- Инициализация массива под 0
- Чтение файла построчно и подсчет символов
- Вывод результатов на экран
- Закрытие файла
- Получение символа от пользователя для проверки корректности работы программы
- Выход из программы с ошибкой при неправильном открытии файла
- Выход из программы при закрытии файла без ошибок