布尔运算符问题

时间:2016-02-02 23:26:36

标签: c++ iostream

这里的简单代码,我尝试编写可以获取特定关键字的代码,但我没有太多运气。这是代码:

#include <iostream>
int main(){
    std::string input;
    bool isUnique = true;

    std::cout<<"Please type a word: ";
    std::cin>>input;

    if(input == "the" || "me" || "it"){
        isUnique = false;
    }
    if(isUnique){
        std::cout<<"UNIQUE!!"<<std::endl;
    }
    else
        std::cout<<"COMMON"<<std::endl;
}

如果您输入这三个单词中的任何一个(在if语句中),您将从程序中获得正确的输出(&#34; COMMON&#34;)。但是,如果您输入任何其他内容,您将获得相同的确切输出。如果我将程序限制为仅搜索一个单词(即:&#34;&#34;)然后测试它,一切都按预期工作,但只要有两个或更多关键字,程序就会列出所有内容as&#34; COMMON&#34;。我也试过用逗号代替或者说句,但这也没有做任何事情。我尝试实现此功能的代码将包含50多个关键字,因此我尝试找到搜索这些字词的最有效方法。

1 个答案:

答案 0 :(得分:3)

你只需要改变:

if(input == "the" || "me" || "it")

为:

if(input == "the" || input == "me" || input == "it")

运算符||A || B中的工作方式是每个子句AB都会被评估(如果有的话)。 B并不关心A的背景。

因此,在您的情况下,可能会评估以下3个表达式(最后一个表达式永远不会):

  1. input == "the"
  2. "me"
  3. "it"
  4. 第一个可能会或可能不会产生true,但第二个肯定会产生。

    您还可以将代码重写为:

    int main() {
        std::cout << "Please type a word: ";
        std::string input;
        std::cin >> input;
    
        auto common_hints = {"the", "me", "it"};
        if (std::find(begin(common_hints), end(common_hints), input) != end(common_hints)) {
            std::cout << "COMMON\n";
        } else {
            std::cout << "UNIQUE!!\n";
        }
    }
    

    Live demo

    或(使用Boost):

    int main() {
        std::cout << "Please type a word: ";
        std::string input;
        std::cin >> input;
    
        auto common_hints = {"the", "me", "it"};
        if (boost::algorithm::any_of_equal(common_hints, input)) {
            std::cout << "COMMON\n";
        } else {
            std::cout << "UNIQUE!!\n";
        }
    }
    

    Live demo