Для каждого слова первого предложения определить, входит ли оно во второе предложение - C (СИ) (149874)
Формулировка задачи:
даны два предложения. Для каждого слова первого предложения (в том числе для повторяющихся в этом предложении слов) определить, входит ли оно во второе предложение.
Решение задачи: «Для каждого слова первого предложения определить, входит ли оно во второе предложение»
textual
Листинг программы
/* ANSI C 99 with glib-2.0 */ #include <stdio.h> #include <glib.h> #define DELIM " \t\n" int main(void) { char firstStr[BUFSIZ], secondStr[BUFSIZ]; while ( printf("First string: ") && fgets(firstStr, BUFSIZ, stdin) && *firstStr != '\n' && printf("Second string: ") && fgets(secondStr, BUFSIZ, stdin) && *secondStr != '\n' ) { char ** firstWords = g_strsplit_set(firstStr, DELIM, -1); char ** secondWords = g_strsplit_set(secondStr, DELIM, -1); GHashTable * firstHash = g_hash_table_new(g_str_hash, g_str_equal); for ( char ** wrd = firstWords; *wrd; ++wrd ) if ( **wrd ) g_hash_table_insert(firstHash, *wrd, GINT_TO_POINTER(GPOINTER_TO_INT(g_hash_table_lookup(firstHash, *wrd)) + 1)); GHashTable * secondHash = g_hash_table_new(g_str_hash, g_str_equal); for ( char ** wrd = secondWords; *wrd; ++wrd ) if ( **wrd ) g_hash_table_insert(secondHash, *wrd, GINT_TO_POINTER(GPOINTER_TO_INT(g_hash_table_lookup(secondHash, *wrd)) + 1)); gpointer wrd, cnt; GHashTableIter iter; g_hash_table_iter_init(&iter, firstHash); while ( g_hash_table_iter_next(&iter, &wrd, &cnt) ) printf("%s -> %s\n", (char*)wrd, ( GPOINTER_TO_INT(g_hash_table_lookup(secondHash, wrd)) >= GPOINTER_TO_INT(cnt) ) ? "OK" : "FAIL"); g_hash_table_destroy(firstHash); g_hash_table_destroy(secondHash); g_strfreev(firstWords); g_strfreev(secondWords); } return 0; }
Объяснение кода листинга программы
- Объявление переменных:
firstStr
иsecondStr
- массивы символов (строки) для хранения первых и вторых строк соответственно.DELIM
- строка, содержащая разделители (пробел, табуляция, символ новой строки).BUFSIZ
- размер буфера в символах.
- Ввод первых и вторых строк с помощью
fgets()
. - Разделение каждой строки на слова с помощью
g_strsplit_set()
. - Создание хеш-таблицы для каждого набора слов.
- Вставка каждого слова в соответствующую хеш-таблицу с подсчетом количества вхождений с помощью
g_hash_table_insert()
. - Перебор всех слов в каждом наборе с помощью
g_hash_table_iter_init()
иg_hash_table_iter_next()
. - Проверка наличия слова во втором наборе с помощью условного оператора.
- Вывод результата в консоль с помощью
printf()
. - Освобождение памяти, выделенной для слов и хеш-таблиц, с помощью
g_strfreev()
иg_hash_table_destroy()
. - Цикл основного тела программы повторяется до тех пор, пока пользователь не введет
Ctrl + D
. - Возврат 0 из функции
main()
, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д