Вывести символы в порядке их встречаемости в строке - 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;
}

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

В этом коде:

  1. Подключаются необходимые заголовочные файлы: stdio.h, stdlib.h и limits.h
  2. Определяются типы данных: pair_t - это массив из двух unsigned char, str_t - это строка символов длиной 256.
  3. Определяются функции: cmp - это функция сравнения, используемая в функции qsort, и get_string - это функция, которая считывает строку из стандартного ввода.
  4. Создаются и инициализируются переменные: str - это строка, в которой необходимо посчитать частоту появления символов, и counters - это массив, в котором будут храниться подсчеты для каждого символа.
  5. В цикле while происходит считывание строки и подсчет количества каждого символа.
  6. С помощью функции qsort сортируются массивы подсчетов по второму элементу (частоте появления символа).
  7. Выводится отсортированный список символов в порядке их встречаемости.
  8. Цикл while продолжается до тех пор, пока пользователь не введет строку и не нажмет Enter.
  9. В конце программы возвращается 0, что означает успешное выполнение.

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


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

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

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