我正在尝试创建一个布尔函数,该函数对char进行求值,如果char为'('')''*''-''+',则返回true

时间:2019-09-12 22:20:14

标签: c++

我收到的警告代码为C682,并且在编程时较晚,因此我不确定到底出了什么问题。

bool isOperator(char ch)
{

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

如果char是其中的一个,我希望它返回true,否则返回false。

4 个答案:

答案 0 :(得分:3)

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

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

否则,您将'c'和其他表达式作为始终为true的表达式进行计算。

有些人可能会看到更多readabale(重复性较低):

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

答案 1 :(得分:2)

或者,您可以将其实现为对数组的搜索。这样,您可以轻松添加和删除运算符。

#include <algorithm>
#include <iterator>

bool isOperator(char op) {
  const char operators[] = {'(', ')', '+', '-', '*'};

  return std::find(std::begin(operators), std::end(operators), op) != std::end(operators);
}

答案 2 :(得分:2)

正确的书写方式是

if (ch == '(' or ch == ')' or ch == '*' or ch == '+')


除了此处的其他答案外,您还可以使用std::any_of

bool isOperator(char ch)
{
  static const std::array arr { '(', ')', '*', '-', '+' };
  return std::any_of(arr.begin(), arr.end(), [ch](char const& c) {
    return ch == c;
  });
}

答案 3 :(得分:-1)

让我们回顾一些事情: 用实际的运算符||代替或在c ++中等于或。 (请注意或是ISO646标准,可以使用,但要取决于使用偏好)

接下来,我们需要确保为您要检查的每个字符添加ch

在那之后,我们应该采用一种更简单的形式:

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

注意:我们也可以按照if / else的方式来做

bool is_operator_match = false;
if (ch == '(') || (ch== ')') || (ch == '*') || (ch == '-') || (ch == '+')
{
    is_operator_match = true;
}

return is_operator_match;