Этот гигантский код я нашел в Интернете. Это программа, которая находит n наиболее часто встречающихся слов в файле и распечатывает их. Следующая программа читает данный текстовый файл, но я хочу написать текст ввода самостоятельно, поэтому я, вероятно, собираюсь хранить слова в массиве. Как мне это сделать, чтобы программа читала текст случайной длины, и следующая программа все равно будет работать? А также, если во входном тексте есть знаки препинания, мне придется избавиться от них, поэтому текст не будет состоять только из букв от 'a' до 'z'. Нужна ли мне тогда постоянная константа MAX_CHARS
?Прочитайте текст ввода в массив слов и избавьтесь от знаков препинания
#include <stdio.h>
#include <string.h>
#include <ctype.h>
# define MAX_CHARS 26
# define MAX_WORD_SIZE 32000
// A utility function to show results, The min heap
// contains n most frequent words so far, at any time
void displayMinHeap(MinHeap* minHeap)
{
int i;
// print top N word with frequency
for(i = 0; i < minHeap->count; ++i)
{
printf("%s %d\n", minHeap->array[i].word,
minHeap->array[i].frequency);
}
}
// The main funtion that takes a file as input, add words to heap
// and Trie, finally shows result from heap
void printKMostFreq(FILE* fp, int n)
{
// Create a Min Heap of Size n
MinHeap* minHeap = createMinHeap(n);
// Create an empty Trie
TrieNode* root = NULL;
// A buffer to store one word at a time
char buffer[MAX_WORD_SIZE];
// Read words one by one from file. Insert the word in Trie and Min Heap
while(fscanf(fp, "%s", buffer) != EOF)
insertTrieAndHeap(buffer, &root, minHeap);
// The Min Heap will have the n most frequent words, so print Min Heap nodes
displayMinHeap(minHeap);
}
int main()
{
int n;
scanf("%d", &n);
FILE *fp = fopen ("file.txt", "r");
if (fp == NULL)
printf ("File doesn't exist ");
else
printKMostFreq (fp, n);
return 0;
}
TL; DR! Пожалуйста, сузите код к тем частям, где у вас есть проблемы, или еще лучше создайте [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и покажите нам. –
Код, который вы показываете, не содержит некоторых частей, например. определения «MinHeap». – fuz