Анализ частоты слов на C: программа для подсчета вхождений слов

Вот программа на языке C, которая выполняет анализ частоты слов:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_WORDS 1000
#define MAX_WORD_LENGTH 50
typedef struct {
    char word[MAX_WORD_LENGTH];
    int frequency;
} WordFrequency;
void toLowerCase(char *str) {
    for (int i = 0; str[i]; i++) {
        str[i] = tolower(str[i]);
    }
}
int isWordCharacter(char c) {
    return isalpha(c) || c == '\'' || c == '-';
}
void updateFrequency(WordFrequency *wordFreq, int *numWords, char *word) {
    for (int i = 0; i < *numWords; i++) {
        if (strcmp(wordFreq[i].word, word) == 0) {
            wordFreq[i].frequency++;
            return;
        }
    }
    strcpy(wordFreq[*numWords].word, word);
    wordFreq[*numWords].frequency = 1;
    (*numWords)++;
}
void printWordFrequencies(WordFrequency *wordFreq, int numWords) {
    for (int i = 0; i < numWords; i++) {
        printf("%s: %d\n", wordFreq[i].word, wordFreq[i].frequency);
    }
}
int main() {
    char text[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eget mi vel mauris consequat accumsan. Maecenas auctor tristique lorem, nec fringilla velit. Sed lacinia tellus at lectus dignissim, quis pellentesque urna sagittis. Donec sed augue euismod, ultricies felis vitae, elementum elit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer nec dui in turpis fermentum porttitor. Sed at nulla urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae;";
    // Convert text to lowercase
    toLowerCase(text);
    WordFrequency wordFreq[MAX_WORDS];
    int numWords = 0;
    char *token = strtok(text, " ");
    while (token != NULL) {
        // Remove non-word characters from the token
        int len = strlen(token);
        int j = 0;
        for (int i = 0; i < len; i++) {
            if (isWordCharacter(token[i])) {
                token[j++] = token[i];
            }
        }
        token[j] = '\0';
        if (strlen(token) > 0) {
            updateFrequency(wordFreq, &numWords, token);
        }
        token = strtok(NULL, " ");
    }
    printWordFrequencies(wordFreq, numWords);
    return 0;
}

Эта программа принимает вводимый текст, преобразует его в нижний регистр и выполняет анализ частоты слов. Он использует структуру WordFrequencyдля хранения каждого слова и его частоты. Программа удаляет символы, не являющиеся словами (например, знаки препинания) из каждого слова перед обновлением частоты.

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

  1. toLowerCase: преобразует строку в нижний регистр.
  2. isWordCharacter: проверяет, является ли символ словесным символом (алфавитом, апострофом или дефисом).
  3. updateFrequency: обновляет частоту появления слова в массиве WordFrequency.
  4. printWordFrequency: печатает частоту слов.