2012-10-10 116 views
1

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

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

您的所有字符串都是空终止的?你实际上是否存储了一些东西? –

+2

我认为你的返回值错误,1是真('in_dictionary'),0是错误的。 –

+0

当我比较它们时,我将它们放入字符串中。这对我正在尝试做的事来说还不够吗? – Eric

回答

6

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

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

而且,你的回报值是倒退 - 通常情况下,你会返回0来表示失败(不匹配),并返回1来表示成功(比赛)。例外情况是main()函数,按照惯例和许多POSIX系统调用(成功返回0,失败返回-1)。

+0

我已经修复了返回值,并且现在有if语句返回这个单词,但它似乎仍然没有按照我的要求做。 – Eric

+0

现在在做什么? –

+1

@Eric:说它没有做你想做的事没有帮助。你需要说出* *做什么**和**你想要什么。 –

2

strcmp()返回0则表示找到了匹配。那时您需要退回1而不是0。另外,如果strcmp()返回1这意味着字典中的当前元素与搜索字符串不匹配,此时您不能断定字典中不存在匹配,它可能会晚一些。因此,只有当您将搜索字符串与字典中的所有元素进行比较并且未找到任何匹配项时,才能断定搜索字符串不在字典中。

您需要:

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