Создать частотный словарь для заданного текста - C (СИ)

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

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

Создать частотный словарь для заданного текста: вывести слова текста в алфавитном порядке и справа от каждого слова ск раз оно встречается в тексте

Решение задачи: «Создать частотный словарь для заданного текста»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <glib.h>
 
#define DELIM " ,.!?-/()\t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        GHashTable * hash = g_hash_table_new(g_str_hash, g_str_equal);
        
        for ( char * wrd = strtok(buf, DELIM); wrd; wrd = strtok(NULL, DELIM) ) {
            int cnt = GPOINTER_TO_INT(g_hash_table_lookup(hash, wrd));
            g_hash_table_insert(hash, wrd, GINT_TO_POINTER(cnt + 1));
        }
        
        if ( g_hash_table_size(hash) ) {
            GList * keys = g_hash_table_get_keys(hash);
            keys = g_list_sort(keys, (GCompareFunc)strcmp);
            for ( GList * key = g_list_first(keys); key; key = g_list_next(key) )
                printf("%s: %d\n", key->data, GPOINTER_TO_INT(g_hash_table_lookup(hash, key->data)));
            g_list_free(keys);
        }
        else
            printf("Empty string!\n");
        
        g_hash_table_destroy(hash);
    }
    
    return 0;
}

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

В этом коде:

  1. Объявлены три переменные: buf (буфер для чтения строки из стандартного ввода), DELIM (разделитель, используемый для разбиения входной строки на слова) и hash (словарь для хранения слов и их частоты).
  2. В цикле while программа запрашивает у пользователя строку и сохраняет её в переменной buf.
  3. Затем код разбивает строку на слова и добавляет их в словарь hash, увеличивая частоту каждого слова на 1.
  4. Если размер словаря не равен нулю, код сортирует ключи словаря в алфавитном порядке и выводит каждое слово и его частоту.
  5. Если размер словаря равен нулю, код выводит сообщение об пустом входном тексте.
  6. В конце программы вызывается функция g_hash_table_destroy для освобождения памяти, занятой словарем. Код использует функции из библиотеки GLib для работы со словарями и списками. Функция g_hash_table_new создает новый словарь, g_hash_table_lookup ищет значение для заданного ключа, g_hash_table_insert добавляет новый ключ и значение в словарь, g_hash_table_size возвращает количество элементов в словаре, g_hash_table_get_keys возвращает список всех ключей в словаре, а g_list_sort сортирует список.

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

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