Создать частотный словарь для заданного текста - 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
сортирует список.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д