对于我正在编写的程序的一部分,我需要搜索文本文件以查看文件中是否存在某个单词,如果存在,我想将其打印到屏幕上。为什么使用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;
}
}
不适合我?
答案 0 :(得分:6)
您只是将字典中的第一个字词与您要搜索的字词进行比较。您只应在比较所有字词后返回失败:
for(...) {
if(dict[i] matches)
return MATCH;
}
return NO_MATCH;
此外,您的返回值是向后的 - 通常,您返回0表示失败(不匹配),返回1表示成功(匹配)。根据惯例,main()
函数和许多POSIX系统调用(成功返回0,失败返回-1)的例外情况。
答案 1 :(得分:2)
当strcmp()
返回0
时,则表示找到了匹配项。那时您需要返回1
而不是0
。此外,如果strcmp()
返回1
,则表示字典中的当前元素与搜索字符串不匹配,此时您无法断定字典中不存在匹配,可能会在以后出现。因此,只有当您将搜索字符串与字典中的所有元素进行比较并且未找到任何匹配时,才能得出结论,搜索字符串不在字典中。
你需要:
for (i = 0; i<size; i++)
if (strcmp(word, dict[i]) == 0){
return 1;
}
return 0;