在C中使用排序字典检查字符串的拼写

在C中使用排序字典检查字符串的拼写,c,string,file-io,dictionary,C,String,File Io,Dictionary,我试图对照已排序的字典文件检查传递给函数的单个单词字符串,但我不明白它为什么不起作用 拼写检查器不区分大小写,因此要检查的原始单词将被复制并设置为大写 字典的格式为: 字\n 单词\n 按字母顺序排列,每个单词后面有换行符,没有空格或任何其他非字母字符。 这本词典一次只能读一个词 我有一个带fgets的while循环,里面是一个带I

我试图对照已排序的字典文件检查传递给函数的单个单词字符串,但我不明白它为什么不起作用

拼写检查器不区分大小写,因此要检查的原始单词将被复制并设置为大写

字典的格式为:

字\n 单词\n

按字母顺序排列,每个单词后面有换行符,没有空格或任何其他非字母字符。 这本词典一次只能读一个词

我有一个带fgets的while循环,里面是一个带I 如果i==strlen(word)-1并且它*(word+i)=*(line+i),它应该返回1。 strcmp也没有为我返回0。 你知道为什么这样不行吗


注意:我会发布一个代码示例,但这违反了学校的政策

在我看来,按照您给定的格式(word1\nword2\nword3\n…),排序并不能真正帮助您。。。然而我认为您需要构建一个单词的内存数组(只需将每个
\n
转换为
\0
,并将数组中的每个指针设置为单词的开头)。然后,您的排序变得很有用,您可以进行二进制搜索来找到您的候选人(如果找不到,则意味着候选人拼写错误)

有了二进制排序的能力,一个简单的
strcasecmp(word,dictionary[searchpoint])
将为您执行不区分大小写的比较


至于为什么您当前的代码不起作用,您的学校政策似乎是为了防止您在堆栈溢出方面获得直接帮助。。。因为没有看到你的代码,直接回答是不可能的

实际上,这是因为学校拥有代码的知识产权,以防止团队项目出现法律问题。字典大约有200000个条目,所以我不认为我们应该创建一个数组。如果您将字典读入内存,正如您的描述所暗示的,从那里读入数组可能不会增加太多开销;64位系统上增加1.6MB,32位系统上增加800K。没有启用二进制搜索的数组。。。你打算用线性搜索吗?有没有别的办法去附近合适的地方?否则,检查“ZomgThisistKingForever”将花费很长时间。奇怪!让我们谈谈“xxx”,但你不应该读“xxx”。欢迎回到中年,谈论代码的唯一方法就是向读者提供代码!在您的示例中,“单词”前面有一个空格!