Создать частотный словарь для заданного текста - 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;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены три переменные:
buf(буфер для чтения строки из стандартного ввода),DELIM(разделитель, используемый для разбиения входной строки на слова) иhash(словарь для хранения слов и их частоты). - В цикле
whileпрограмма запрашивает у пользователя строку и сохраняет её в переменнойbuf. - Затем код разбивает строку на слова и добавляет их в словарь
hash, увеличивая частоту каждого слова на 1. - Если размер словаря не равен нулю, код сортирует ключи словаря в алфавитном порядке и выводит каждое слово и его частоту.
- Если размер словаря равен нулю, код выводит сообщение об пустом входном тексте.
- В конце программы вызывается функция
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сортирует список.