Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将输入的文本读入一个单词数组,去掉标点符号_C_Arrays_Input_Punctuation - Fatal编程技术网

C 将输入的文本读入一个单词数组,去掉标点符号

C 将输入的文本读入一个单词数组,去掉标点符号,c,arrays,input,punctuation,C,Arrays,Input,Punctuation,我在网上找到了一个巨大的密码。。这是一个程序,在一个文件中找到n个最常用的单词并打印出来。下面的程序读取给定的文本文件,但我想自己编写输入文本,所以我可能要将单词存储在数组中。我该如何做才能让程序读取随机长度的文本,而下面的程序仍然可以工作?而且,如果输入文本中有标点符号,我必须去掉它们,这样文本就不会只包含从“a”到“z”的字母。我甚至需要MAX\u CHARS常量吗 #include <stdio.h> #include <string.h> #include <

我在网上找到了一个巨大的密码。。这是一个程序,在一个文件中找到n个最常用的单词并打印出来。下面的程序读取给定的文本文件,但我想自己编写输入文本,所以我可能要将单词存储在数组中。我该如何做才能让程序读取随机长度的文本,而下面的程序仍然可以工作?而且,如果输入文本中有标点符号,我必须去掉它们,这样文本就不会只包含从“a”到“z”的字母。我甚至需要
MAX\u 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;
}
#包括
#包括
#包括
#定义最大字符数26
#定义最大单词大小32000
//显示结果的实用函数,最小堆
//包含到目前为止最常用的n个单词,在任何时候
void displayMinHeap(MinHeap*MinHeap)
{
int i;
//按频率打印前N个单词
对于(i=0;icount;++i)
{
printf(“%s%d\n”,minHeap->array[i]。word,
minHeap->array[i].频率);
}
}
//将文件作为输入的主要功能是向堆中添加单词
//和Trie,最后显示堆的结果
void printKMostFreq(文件*fp,int n)
{
//创建大小为n的最小堆
MinHeap*MinHeap=createMinHeap(n);
//创建一个空的Trie
三节点*根=空;
//一次存储一个字的缓冲区
字符缓冲区[最大字大小];
//从文件中逐个读取单词。在Trie和Min Heap中插入单词
while(fscanf(fp,“%s”,buffer)!=EOF)
insertTrieAndHeap(缓冲区和根目录,minHeap);
//最小堆将有n个最频繁的字,因此打印最小堆节点
显示minHeap(minHeap);
}
int main()
{
int n;
scanf(“%d”和“&n”);
FILE*fp=fopen(“FILE.txt”、“r”);
如果(fp==NULL)
printf(“文件不存在”);
其他的
printKMostFreq(fp,n);
返回0;
}

可以修改此程序以满足您的需要,但我不会为您这样做,至少不会不付钱。对于简单的解决方案,请尝试生成文本并将其写入文本文件。然后,您可以将该文件的内容传递到字数计算软件。您也可以使用管道来完成此操作。

TL;博士请将代码范围缩小到您遇到问题的部分,或者更好的做法是创建一个并向我们展示。您展示的代码缺少一些部分,例如
MinHeap
@lol的定义。您使用的是什么操作系统?谷歌可以告诉你什么是管道。如果不查阅文档和大量阅读,您将无法在编程方面取得进展。