1

对于我正在编写的程序的一部分,我需要搜索文本文件以查看文件中是否存在某个单词,如果存在,我想将其打印到屏幕上。为什么要使用 for 循环来进行字符串比较,例如:

int in_dictionary(char dict[][8], char word[], int size) {
int i;

for (i = 0; i<size; i++)
    if (strcmp(word, dict[i]) == 0){
        return 0;
    }
    else{
        return 1;
    }

}

不为我工作?

4

2 回答 2

6

您只是将字典中的第一个单词与您正在搜索的单词进行比较。您应该只在比较所有单词后返回失败:

for(...) {
    if(dict[i] matches)
        return MATCH;
}
return NO_MATCH;

此外,您的返回值是向后的——通常,您会返回 0 表示失败(不匹配),返回 1 表示成功(匹配)。main()按照惯例,函数和许多 POSIX 系统调用(成功返回 0,失败返回 -1)是例外。

于 2012-10-10T17:49:49.423 回答
2

strcmp()返回 a0时,表示找到了匹配项。那时你需要返回 a1而不是0。此外,如果strcmp()返回1则表示字典中的当前元素与搜索字符串不匹配,此时您不能断定字典中不存在匹配项,它可能会稍后出现。因此,只有当您将搜索字符串与字典中的所有元素进行比较并且没有找到任何匹配项时,您才能得出搜索字符串不在字典中的结论。

你需要:

for (i = 0; i<size; i++) 
    if (strcmp(word, dict[i]) == 0){
        return 1;
    }
return 0;
于 2012-10-10T17:49:54.613 回答