21xrx.com
2024-11-08 23:27:03 Friday
登录
文章检索 我的文章 写文章
C++实现算数表达式求值算法
2023-07-07 20:05:40 深夜i     --     --
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;

}

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复