21xrx.com
2025-03-27 21:27:12 Thursday
文章检索 我的文章 写文章
C++实现算数表达式求值算法
2023-07-07 20:05:40 深夜i     12     0
C++ 算数表达式 求值算法 编程 计算机科学

算数表达式是我们在生活中经常遇见的一类数学问题,比如:1+3*5-2。在计算机中,我们也需要将算数表达式转换为计算机语言,然后进行计算。而在C++中,有许多实现算数表达式求值的方法,下面我们就来看一下其中一种方法。

首先,我们需要将表达式转换为后缀表达式。后缀表达式是将操作符放在后面,操作数放在前面,并且不使用括号的表达式。比如,将中缀表达式1+3*5-2转化为后缀表达式就是135*+2-。转换的方法可以用栈实现。

接着,我们将后缀表达式中的元素依次放入栈中,若遇到操作符,则取出栈顶的两个元素,进行计算,并将结果放回栈中。最终,栈中仅剩下一个元素,即为表达式的结果。

下面是C++实现的代码:

#include <iostream>
#include <stack>
#include <string>
#include <cctype>
using namespace std;
int evaluatePostfix(string exp) {
  stack<int> s;
  for (int i = 0; i < exp.length(); i++) {
    if (isdigit(exp[i])) {
      int num = 0;
      while (isdigit(exp[i])) {
        num = num * 10 + (int)(exp[i] - '0');
        i++;
      }
      i--;
      s.push(num);
    }
    else {
      int op1 = s.top();
      s.pop();
      int op2 = s.top();
      s.pop();
      switch (exp[i]) {
      case '+': s.push(op2 + op1); break;
      case '-': s.push(op2 - op1); break;
      case '*': s.push(op2 * op1); break;
      case '/': s.push(op2 / op1); break;
      }
    }
  }
  return s.top();
}
int main() {
  string exp = "1+3*5-2";
  cout << evaluatePostfix(exp) << endl;
  return 0;
}

该代码便可正确求解任意符合条件规则的算数表达式。

  
  

评论区