Вывести символы в порядке их встречаемости в строке - C (СИ)
Формулировка задачи:
Помогите пожалуйста.
Задание такое: Написать программу на Си ,которая выводит все символы строки в порядке их встречаемости в строке.
Решение задачи: «Вывести символы в порядке их встречаемости в строке»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <limits.h> #define CHAR_VALUES ( UCHAR_MAX + 1 ) typedef unsigned char pair_t[2]; typedef char str_t[256]; #define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 ) int cmp(const void * a, const void * b) { return (*(pair_t*)b)[1] - (*(pair_t*)a)[1]; } int main(void) { str_t str; while ( printf("String: ") && get_string(str) ) { pair_t counters[CHAR_VALUES] = { 0 }; int i; for ( i = 0; str[i]; ++i ) { counters[(unsigned)(str[i])][0] = str[i]; counters[(unsigned)(str[i])][1] += 1; } qsort(counters, CHAR_VALUES, sizeof(pair_t), cmp); printf("Ordered chars: "); for ( i = 0; counters[i][1]; ++i ) printf("%c", (char)(counters[i][0])); printf("\n"); } return 0; }
Объяснение кода листинга программы
В этом коде:
- Подключаются необходимые заголовочные файлы: stdio.h, stdlib.h и limits.h
- Определяются типы данных: pair_t - это массив из двух unsigned char, str_t - это строка символов длиной 256.
- Определяются функции: cmp - это функция сравнения, используемая в функции qsort, и get_string - это функция, которая считывает строку из стандартного ввода.
- Создаются и инициализируются переменные: str - это строка, в которой необходимо посчитать частоту появления символов, и counters - это массив, в котором будут храниться подсчеты для каждого символа.
- В цикле while происходит считывание строки и подсчет количества каждого символа.
- С помощью функции qsort сортируются массивы подсчетов по второму элементу (частоте появления символа).
- Выводится отсортированный список символов в порядке их встречаемости.
- Цикл while продолжается до тех пор, пока пользователь не введет строку и не нажмет Enter.
- В конце программы возвращается 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д