0

我正在寻找最有效的方式来阅读文本文件中给我的一组单词。

我正在编写的程序基本上是拼字游戏。它将生成 7 个随机字母(已经完成),然后用户需要从任意数量的字母中输入一个单词(就像在 Scrabble 中一样),程序会对这个单词进行评分(也已经完成)。

我现在面临的问题是如何阅读单词。我们得到一个包含 80 个单词的文件,就像这个项目的通用“字典”。我正在考虑使用该fopen()功能或​​手动输入单词(这会很糟糕......)。我面临如何存储单词的另一个问题。我在考虑一个二维数组,其中每一列或每一行都是一个单词。字数限制为 10,000 个,长度不得超过 6 个字母。

关于如何做到这一点的任何提示都会很棒。

4

1 回答 1

3

将单词读入一个动态分配的字符串数组。

  1. 打开文件 ( fopen())。
  2. 读取文件的每一行 ( fgets())。将所有内容设为单写(全部为大写,或全部为小写;<ctype.h>)。
  3. (如有必要)将行拆分为单词(<string.h>;strspn()strcspn()可能)。
  4. 对于每个单词,分配足够的内存并将其复制到该内存中(strdup()如果可用;否则自己编写)。
  5. 将指向字符串的指针存储在动态分配的指针数组 ( malloc(), realloc()) 中。
  6. 在末尾关闭文件 ( fclose())。
  7. 对字符串数组进行排序以便快速查找 ( qsort())。
  8. 使用二分搜索查找单词 ( bsearch())。

如果您没有学过指针,更不用说指针数组,那么您仍然可以逐字使用步骤 1-3 和 6-8。您将预先分配一个 2D 字符数组,10,000 x 7(因为最大字长为 6),并记录正在使用的字符数(一个简单的计数器)。确保所有字符串都不超过 6 个字符;确保总字数不超过 10,000 字。

您需要的比较功能qsort()bsearch()这种情况下略有不同。

您可以放弃二进制搜索的效率并使用简单的线性搜索。

于 2012-08-27T01:35:22.013 回答