我收到的警告代码为C682,并且在编程时较晚,因此我不确定到底出了什么问题。
bool isOperator(char ch)
{
if (ch == '(' or ')' or '*' or '-' or '+')
{
return true;
}
else
return false;
}
如果char是其中的一个,我希望它返回true,否则返回false。
答案 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;