2015-04-17 1 views
0

Этот гигантский код я нашел в Интернете. Это программа, которая находит 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; 
} 
+2

TL; DR! Пожалуйста, сузите код к тем частям, где у вас есть проблемы, или еще лучше создайте [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и покажите нам. –

+0

Код, который вы показываете, не содержит некоторых частей, например. определения «MinHeap». – fuz

ответ

0

Можно модифицировать эту программу, чтобы сделать то, что вы хотите, но я не собираюсь делать это для вас, по крайней мере, не без оплаты. Для простого решения попробуйте сгенерировать текст и записать его в текстовый файл. Затем вы можете передать содержимое этого файла в программное обеспечение для подсчета слов. Вы также можете использовать трубы для этого.

+0

@lol В какой операционной системе вы работаете? Google может рассказать вам, что такое трубы. Вы далеко не продвинетесь в программировании, не консультируясь с документацией и * прочитав * много. – fuz

Смежные вопросы