【问题标题】:Create a spell checker in C在 C 中创建拼写检查器
【发布时间】:2015-06-12 03:55:04
【问题描述】:

所以我需要创建一个拼写检查器,它接受一个输入文件并使用给定的字典文件检查它,并输出拼写错误的单词。我有一个想法,但是我卡在需要比较每个文件中的单词的地方。我不知道如何将一个文件中的一个单词与另一个文件中的所有单词进行比较。我在想我会使用strstr() 函数来做到这一点,但我再次陷入了如何实际实现它的困境。到目前为止,这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main(int argc, char* argv[]) {
    FILE *inp = NULL;
    FILE *dic = NULL;
    inp = fopen(argv[1], "r");
    dic = fopen("american", "r");
    char *wordsString;
    char *dictionary;
    int inputStatus1, inputStatus2, i;
    inputStatus1 = fscanf(inp, %s, wordsString);
    inputStatus2 = fscanf(dic, %s, dictionary);
}

【问题讨论】:

  • 我建议不要使用strstr()。它不仅是一个非标准的扩展,而且对于拼写检查(尤其是对于大型字典)而言,它的效率非常低。您可能想要使用字典单词和二进制搜索的排序列表,或者包含字典的哈希表。排序列表更容易,但速度较慢。
  • @brenns10 strstr 是一个 C 标准函数,并且一直如此。
  • @brenns10 Linux 程序员手册strstr() 函数符合 C89 和 C99。
  • @Lundin @ace 糟糕,我误读了 GNU 手册页,其中 strcasestr() 是一个非标准扩展。我关于效率的观点仍然成立。
  • @bikerguy 请注意,在fscanf() 调用中,您需要在%s(如"%s")周围加上双引号。

标签: c spell-checking


【解决方案1】:

您需要将文件导入您的程序(如果它的大小不是太大),将其保存为您喜欢的,也许作为一个字符串数组,其中每个字符串是字典中的一个单词,然后检查给定的单词in 循环针对数组中的任何项目,直到找到匹配项。 这个解决方案很慢,但它是我能想到的最基本的解决方案。 在你实现之后,尝试搜索一个合适的数据结构来保存一个字典,这将允许更快的搜索并从文件中的数据构建结构。 我很乐意为您实施,但这是一个很好的学习示例,需要很多基本技能,请尝试在在线课程中搜索解决方案,如果您不能,请回到我们这里!

【讨论】:

  • 使用任何给定语言的适当字典,这样粗略的搜索算法将需要很长时间才能完成。您的解决方案假设 OP 正在使用有限的数据进行一些人为的学校作业(很可能是这种情况,但无论如何)。
  • 我假设从 OP 的进度水平和他提出问题的方式来看。这将是使用哈希表或 trie 的一个很好的例子(更长的构造,但未来的自动完成功能)。
【解决方案2】:

假设您想使用包含给定语言中所有现有单词的真实字典,那么典型的解决方案是读取整个字典文件并将其存储在hash table 中。它具有快速、几乎确定性的表格查找的优势,即使数据量很大。

你必须想出一些聪明的散列函数,它基于每个单词的 ASCII 字母。我敢打赌,这些函数有代码out there on the web

您很可能需要使用动态内存分配来实现哈希表:大量数据应该放在堆上而不是堆栈上,因为作为您的程序的进程将具有有限的堆栈空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 2011-05-11
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2012-12-05
    相关资源
    最近更新 更多