我正在做一些代码检查单词是否在ignoreWords数组中。该函数始终为第一个值返回 true,然后为其余元素返回 false,即使某些单词位于 ignoreWords 数组中也是如此。我不确定我做错了什么,我将不胜感激任何帮助或建议。
bool isIgnoreWord(string word, string ignoreWords[])
{
int length;
string copy[length];
for(int i=0; i < length; i++){
copy[length] = ignoreWords[i]; //to find out length of ignoreWords
//cout << copy[length] << endl;
if(copy[length] == word)
return true;
else
return false;
}
//function returns whether word is in the ignoreWords array
}
编辑:修复了它。我使它比实际情况复杂得多。这是有效的代码:
bool isIgnoreWord(string word, string ignoreWords[])
{
for(int i=0; i < 50; i++){
if(ignoreWords[i] == word){
return true;
}
}
return false;
//function returns whether word is in the ignoreWords array
}
这是因为 for 循环中的 if-else 语句在这两种情况下都返回。
假设你是计算机,你开始 for 循环:
if (copy[length] == word) {
return true;
}
else {
return false;
}
所以你得到数组中的第一个元素,假设它与你正在检查的单词不匹配。这个 if-else 语句说如果不是,则返回 false,并立即停止函数,因为找到了 return 语句。
您可能希望的是,您的程序仅在退出for循环而找不到任何匹配项时才返回false,例如
for (...) {
if (matches) return true;
}
return false;
需要注意的另一件事是,在语句中使用length
之前,您不会对其进行初始化,并且并非所有编译器都支持初始化这样的可变长度数组。