首页 > 解决方案 > 我正在尝试创建一个布尔函数来评估一个 char 并返回 true 如果 char 是 '(' ')' '*' '-' '+'

问题描述

我收到一个警告代码 C682,而且我对编程比较陌生,所以我不确定到底出了什么问题。

bool isOperator(char ch)
{

    if (ch == '(' or ')' or '*' or '-' or '+')
    {
        return true;
    }
    else 
        return false;
}

如果char是其中之一,我希望它返回true,如果它是其他东西,我希望它返回false。

标签: c++

解决方案


or是 C++ 中的逻辑运算符,因此您需要放置条件运算符:

 return ch == '(' or ch == ')' or ch == '*' or ch == '-' or ch == '+');

否则,您将'c'and others 作为一个表达式,它总是true.

有些人可能会认为这更具可读性(重复性较低):

bool isOperator(char ch)
{
    switch( ch ) {
       case '(' : 
       case ')' :
       case '*' :
       case '-' :
       case '+' :
           return true;
    }
    return false;
}

或更多 C++ 方式(虽然它更贵,但在你的情况下,5 个变体不太重要):

 bool isOperator(char ch)
 {
    const std::string_view ops( "()*-+" );
    return ops.find( ch ) != std::string_view::npos;
 }

推荐阅读