Напечатать все слова, которые встречаются в нем ровно один раз - C (СИ)

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

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

Здравствуйте. Помогите, пожалуйста, с задачей. Условие: Дано предложение, состоящее из слов, разделенных пробелами. Напечатать все слова, которые встречаются в нем ровно один раз. Были идеи о том, чтобы каждое слово перенести в отдельную строку двумерного массива и сравнивать строки этого массива, но я не знаю, как это реализовать. Еще пробовал выносить одно слово в отдельную строку и сравнивать его с остальными, но в таком случае не получается цикл организовать. Буду благодарен за помощь.

Решение задачи: «Напечатать все слова, которые встречаются в нем ровно один раз»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <glib.h>
  4.  
  5. #define DELIM " \t\n"
  6.  
  7. int main(void) {
  8.     char buf[BUFSIZ];
  9.    
  10.     while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
  11.         GHashTable * hash = g_hash_table_new(g_str_hash, g_str_equal);
  12.         gpointer key, data;
  13.         GHashTableIter iter;
  14.         char * wrd;
  15.        
  16.         for ( wrd = strtok(buf, DELIM); wrd; wrd = strtok(NULL, DELIM) )
  17.             g_hash_table_insert(hash, wrd, GINT_TO_POINTER(GPOINTER_TO_INT(g_hash_table_lookup(hash, wrd)) + 1));
  18.        
  19.         g_hash_table_iter_init(&iter, hash);
  20.         printf("Unique words:\n");
  21.         while ( g_hash_table_iter_next(&iter, &key, &data) )
  22.             if ( GPOINTER_TO_INT(data) == 1 )
  23.                 printf("%s\n", (char*)key);
  24.        
  25.         g_hash_table_destroy(hash);
  26.     }
  27.    
  28.     return 0;
  29. }

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

В этом коде вычисляются уникальные слова в тексте, который вводится пользователем. Вот список действий, которые выполняются в коде:

  1. Ввод текста от пользователя.
  2. Создание хеш-таблицы для подсчета количества вхождений каждого слова.
  3. Разделение входной строки на слова с помощью функции strtok().
  4. Вставка каждого слова в хеш-таблицу с подсчетом количества его вхождений.
  5. Итерация по хеш-таблице и вывод на экран слов, которые встречаются ровно один раз.
  6. Уничтожение хеш-таблицы после обработки всего введенного текста. Вот список переменных и их значений:
  7. buf - буфер для ввода текста от пользователя.
  8. BUFSIZ - размер буфера.
  9. DELIM - разделитель, который используется при разбиении строки на слова (пробел, табуляция, перевод строки).
  10. hash - хеш-таблица для подсчета количества вхождений каждого слова.
  11. key, data - временные переменные, используемые при итерации по хеш-таблице.
  12. wrd - текущее слово, которое обрабатывается в цикле.
  13. GPOINTER_TO_INT, GINT_TO_POINTER - макросы для преобразования указателей в целые числа и обратно.
  14. g_hash_table_insert, g_hash_table_lookup, g_hash_table_iter_init, g_hash_table_iter_next, g_hash_table_destroy - функции из библиотеки GLib для работы с хеш-таблицами.

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


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

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

12   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы