我正在尝试根据排序的字典文件检查传递给函数的单个单词字符串,但我不明白为什么它不起作用。
拼写检查器不区分大小写,因此要检查的原始单词将被复制并设置为大写。
字典的格式为:
单词\n 单词\n
按字母顺序排列,每个单词后带有换行符,没有空格或任何其他非字母字符。 正在使用 fgets 一次读入一个单词。
我有一个带有 fgets 的 while 循环,里面有一个带有 i < strlen(word) 的 for 循环 for 循环一次比较一个字符 *(word + i) == *(line + i) else break;
如果 i == strlen(word) - 1 并且它 *(word + i) == *(line + i) 它应该返回 1。 strcmp 也不为我返回 0 。 知道为什么这不起作用吗?
注意:我会发布一个代码示例,但这违反了学校政策。
最佳答案
在我看来,按照您给出的格式(word1\nword2\nword3\n...),排序并不能真正帮助您...但是。我认为您需要构建一个内存中的单词数组(只需将每个 \n
转换为 \0
并将数组中的每个指针设置为单词的开头单词)。然后你的排序就变得有用了,你可以进行二分搜索来找到你的候选项(如果找不到它意味着候选项拼写错误)。
有了二进制排序的能力,一个简单的 strcasecmp(word,dictionary[searchpoint]);
将为您进行不区分大小写的比较。
至于为什么您当前的代码不起作用,您的学校政策似乎旨在阻止您获得有关堆栈溢出的直接帮助...因为如果不看到您的代码,就不可能真正得到直接答案。
关于c - 使用 C 中的排序字典对字符串进行拼写检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20000349/