0

我想从文件中提取单词(然后从控制台输入中),计算它们的出现并将它们存储在我的 Word 结构中:

typedef struct cell{
        char *info; /* word itself */
        int nr;     /* number of appearances of the word *
        }*Word; 

这个结构将被动态分配给文件中包含的尽可能多的单词。考虑这个函数:

void Word_Allocation (Word* a) /* The function that allocates space for one structure */

我的问题是:

  1. 如何正确打开文件并逐行读取?
  2. 如何在结构中正确存储单词和出现次数?
4

2 回答 2

1

您的分配器函数应返回 aWord*并接收为单词本身分配的大小。像这样的东西,也许:

Word * Word_Allocation (size_t size) {
    Word *w = malloc(sizeof(*w));
    if (w) w->info = malloc(size);
    if (!w->info)
    {
        free(w);
        w = NULL;
    }
    return w;
}

您可以一次阅读一个单词:

#define STR(x) #x
enum {MAX_BUF = 100};
char buf[MAX_BUF];
fscanf(infile, "%" STR(MAX_BUF) "s", buf);

然后strlen(buf)+1是传递给的大小Word_Allocation。或者您可以通过调用buf并复制数据。Word_Allocationstrlen

于 2013-04-02T22:32:21.783 回答
1
  1. 至于文件io,是基础。
  2. 至于算法,由于您没有使用 C++,因此map不可用,这对于这个问题来说是微不足道的。C 中一个简单的解决方案可能是:

    1. 分配一个数组cell并读入单词
    2. 对数组进行排序char *info
    3. 数数
于 2013-04-02T22:39:22.417 回答