我正在制作一个程序,通过使用堆栈来计算算术表达式。然而,我的代码在大多数情况下运行并正确计算表达式;当涉及到长表达式时,它不遵循我使用if语句设置的优先级。
void doOp() {
int x = stoi(valStk.top());
valStk.pop();
int y = stoi(valStk.top());
valStk.pop();
string op = opStk.top();
opStk.pop();
double result;
string result2;
if (op == "*")
{
result = x * y;
valStk.push(to_string(result));
}
else if (op == "/")
{
result = x / y;
valStk.push(to_string(result));
}
else if (op == "+")
{
result = x + y;
valStk.push(to_string(result));
}
else if (op == "-")
{
result = y - x;
valStk.push(to_string(result));
}
else if (op == "=>")
{
if (x=y || x>y )
{
result2 = "true";
valStk.push(result2);
}
else
{
result2 = "false";
valStk.push(result2);
}
}
else if (op == "<=")
{
if (x = y || x<y)
{
result2 = "true";
valStk.push(result2);
}
else
{
result2 = "false";
valStk.push(result2);
}
}
}
int main() {
string expression;
string quit;
int counter = 1;
while (quit != "1")
{
std::cout << "Enter an expression item " << counter << ": ";
std::cin >> expression;
checkStr(expression);
std::cout << "Are you done entering expression? Enter 1 to quit. ";
std::cin >> quit;
counter++;
}
for (int i = 0; i < valStk.size(); i++)
{
doOp();
}
std::cout << valStk.top() << endl;
}
编译器不应该使用if语句的顺序来创建优先级吗?
答案 0 :(得分:0)
函数doOp()
处理最顶层的值和相应的操作。这意味着,如果+
位于堆栈的顶部,则将首先评估它。如果运算符*
排在第二位,则会在+
之后处理。
所以,回答这个问题,if
语句的顺序并不重要,但堆栈元素的顺序确实如此。