【问题标题】:Bool function to check if a word is in an array C++用于检查单词是否在数组 C++ 中的 Bool 函数
【发布时间】:2020-06-11 05:45:56
【问题描述】:

我正在做一些代码检查 word 是否在 ignoreWords 数组中。即使某些单词在 ignoreWords 数组中,该函数也会继续为第一个值返回 true,然后为其余元素返回 false。我不确定自己做错了什么,如果有任何帮助或建议,我将不胜感激。

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
}

【问题讨论】:

  • 如果你没有初始化长度,你怎么能有copy[length]?
  • 我实际上对此感到困惑。我想初始化长度,因为我没有明确告诉我长度有多长......我的解决方案是复制长度以忽略单词来找出长度。很确定这是一种糟糕的方法
  • 另外请给出一个最小的可重现示例。顺便说一句,您使用的可变长度数组仅是 C,而不是标准 C++。

标签: arrays boolean compare


【解决方案1】:

那是因为你在 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 之前,您没有对其进行初始化,并且并非所有编译器都支持像这样初始化可变长度数组。 p>

【讨论】:

  • 感谢您的回复。如果我想返回 true 两次怎么办?就像我发现两三个我们应该忽略的词一样?我不希望我的函数返回第一个 true,然后忽略其余部分。
  • 您应该始终将 return 语句视为函数的明确结束;我想不出一种语言可以让您多次返回。如果您想收集与给定值匹配的所有字符串,我可能会建议返回一个数组或向量 - return 语句只能发生一次。
猜你喜欢
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
相关资源
最近更新 更多