2016-02-02 2 views
-2

Простой код здесь, я пытаюсь написать код, который может подбирать определенные ключевые слова, но мне не очень повезло. Вот код:Проблемы с булевым оператором

#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; 
} 

Если вы наберете в любом из этих трех слов (в, если заявление), вы получите правильный выход из программы («COMMON»). Однако, если вы наберете что-нибудь еще, вы получите тот же самый точный результат. Если я ограничу программу только поиском одного слова (т. Е.: «The»), а затем протестируйте его, все будет работать так, как должно, но как только есть два или более ключевых слова, программа просто перечисляет все как «COMMON». Я также попытался заменить запятые запятыми или заявлениями, но ничего не сделал. Код, который я пытаюсь реализовать, будет иметь 50+ ключевых слов, поэтому я пытаюсь найти наиболее эффективный способ поиска этих слов.

+0

', если (вход == "the || input ==" me "|| input == "it") {'Это просто! Чтобы найти из многих ключевых слов, используйте для них контейнер и 'std :: find()'. –

+0

Предлагаю вам посмотреть, как работает '||'. –

+0

@ πάνταῥεῖ Большое спасибо! –

ответ

3

Вы просто должны изменить:

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

к:

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

Кстати оператор || работ в A || B является то, что каждое предложение A и B оценивается (если вообще) на своем собственном. B не заботится о контексте A.

Так вы в вашем случае следующие 3 выражения могут быть оценены (последний никогда):

  1. input == "the"
  2. "me"
  3. "it"

Первый может или не результат 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

Смежные вопросы