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

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

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

Составить частотный словарь вводимого текста. Распечатать его по алфавиту, а справа от каждого слова - частоту, с которой оно встретилось. помогите пожалуйста

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
 
struct Node {
    int         val;
    const char  *key;
    struct Node *left, *right;
};
 
void add(struct Node **root, const char *key) {
    assert(root);
    while (*root) {
       int cmp = strcmp(key, (*root)->key);
       if (cmp == 0) {
           (*root)->val++;
           return;
       }
       if (cmp < 1) {
           root = &(*root)->left;
       } else {
           root = &(*root)->right;
       }
    }
    *root = (struct Node *) malloc(sizeof(struct Node));
    if (!*root) {
        exit(1);
    }
    (*root)->key = key;
    (*root)->val = 1;
    (*root)->left = (*root)->right = NULL;
}
 
void print(struct Node *root) {
    if (root) {
        print(root->left);
        printf("%s => %d\n", root->key, root->val);
        print(root->right);
    }
}
 
int main() {
    const char  *delim = " ,.:;!?";
    struct Node *root  = NULL;
    char        *tok;
    char        str[256];
 
    gets(str); // да, эту функцию лучше не использовать :)
    tok = strtok(str, delim);
    while (tok) {
        add(&root, tok);
        tok = strtok(NULL, delim);
    }
    print(root);
    putchar('\n');
    return 0;
}

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

  1. Включаются необходимые заголовочные файлы: stdio.h, stdlib.h, string.h, assert.h
  2. Определяется структура Node, которая содержит значения ключа и значения, а также указатели на левое и правое поддерево.
  3. Определяются две функции: add и print. Функция add добавляет новый узел в дерево, а функция print выводит значения всех узлов дерева в консоль.
  4. В функции main создается пустое корневое значение для дерева.
  5. Вводится строка, которую необходимо разбить на токены с использованием функции strtok.
  6. Для каждого токена вызывается функция add, чтобы добавить его в дерево.
  7. После обработки всех токенов вызывается функция print, чтобы вывести значения всех узлов дерева.
  8. Возвращается 0, чтобы указать, что программа успешно завершилась.

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


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

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

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