所以我需要创建一个拼写检查器,它接受一个输入文件并用给定的字典文件检查它,并输出拼写错误的单词。我知道如何做到这一点,但我陷入了需要比较每个文件中的单词的地方。我不知道如何将一个文件中的一个单词与另一个文件中的所有单词进行比较。我以为我会使用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);
}
答案 0 :(得分:1)
你需要将文件导入你的程序(如果它的大小不是太大),保存它你喜欢它,可能是一个字符串数组,其中每个字符串是字典中的一个单词,然后在循环中检查给定的单词对阵列中的任何项目,直到找到匹配项。 这个解决方案非常慢,但它是我能想到的最基本的解决方案。 在您实现之后,尝试搜索正确的数据结构以保存字典,从而允许更快的搜索并从文件中的数据构建结构。 我很乐意为你实现这个,但这是一个很好的学习例子,需要很多基本技能,尝试在线搜索解决方案,如果你不能,请回到我们这里!
答案 1 :(得分:0)
假设您要使用包含给定语言中所有现有单词的真实字典,那么典型的解决方案是读取整个字典文件并将其存储在hash table中。它具有快速,几乎确定的表查找的优势,即使有大量数据也是如此。
你必须提出一些基于每个单词上的ASCII字母的聪明的哈希函数。我打赌有这些函数的代码out there on the web。
您很可能需要使用动态内存分配来实现哈希表:大量数据应该放在堆而不是堆栈上,因为您程序的进程将具有有限的堆栈空间。