我正在尝试创建一个布尔函数,该函数计算字符并在字符为"()*-+"时返回 true

I'm trying to create a bool function that evaluates a char and returns true if char is '(' ')' '*' '-' '+'

本文关键字:字符 函数 true 返回 计算 一个 布尔 创建      更新时间:2023-10-16

我收到警告代码 C682 并且我是编程新手,所以我不确定到底出了什么问题。

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

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

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

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

否则,您将'c'和其他人评估为始终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;
}

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

#include <algorithm>
#include <iterator>
bool isOperator(char op) {
const char operators[] = {'(', ')', '+', '-', '*'};
return std::find(std::begin(operators), std::end(operators), op) != std::end(operators);
}

正确的写法是

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

让我们回顾几件事: 替换 或 与实际操作员 ||在 C++ 中,它等效于 OR。(注意,OR是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;