21xrx.com
2024-12-23 01:22:03 Monday
登录
文章检索 我的文章 写文章
C++利用栈实现四则运算表达式求值
2023-07-06 20:17:42 深夜i     --     --
C++ 四则运算 表达式 求值

C++是一种广泛应用于计算机科学和软件开发领域的编程语言,在这些领域中,对于数学的运算和表达式求值是非常常见的需求。其中,四则运算则是最基本的算数计算,在数据结构中,实现四则运算表达式求值常常使用栈来完成。

根据四则运算中的运算规则,在计算表达式时,我们需要优先计算乘除法运算,再计算加减法,这就需要将每个运算符的优先级排序,并使用一个栈来保存运算符和数字,按照优先级顺序进行相应的计算。

具体实现方式如下:

首先,我们需要将表达式转换为逆波兰表达式,该表达式将运算符放到操作数之后。例如,对于表达式“3 + 4 * 5 - 6”,逆波兰表达式为“3 4 5 * + 6 -”。

接下来,我们按顺序扫描逆波兰表达式,当遇到数字时,将其入栈。当遇到运算符时,从栈中取出两个操作数进行运算,并将结果重新入栈,等到表达式扫描完成时,栈中只有一个元素,即为表达式的结果。

下面是C++示例代码:


#include <iostream>

#include <stack>

#include <cstring>

using namespace std;

int calculate(string s) {

  stack<int> stk;

  int num = 0, res = 0;

  char sign = '+';

  for (int i = 0; i < s.size(); i++) {

    if (isdigit(s[i])) {

      num = num * 10 + (s[i] - '0');

    }

    if (!isdigit(s[i]) && s[i] != ' ' || i == s.size() - 1) {

      if (sign == '+') {

        stk.push(num);

      }

      if (sign == '-') {

        stk.push(-num);

      }

      if (sign == '*') {

        int temp = stk.top();

        stk.pop();

        stk.push(temp * num);

      }

      if (sign == '/') {

        int temp = stk.top();

        stk.pop();

        stk.push(temp / num);

      }

      sign = s[i];

      num = 0;

    }

  }

  while (!stk.empty()) {

    res += stk.top();

    stk.pop();

  }

  return res;

}

int main() {

  cout << calculate("3+4*5-6") << endl; // 输出17

  return 0;

}

使用栈实现四则运算表达式的求值,提高了程序的效率和运行速度,同时也保证了计算的正确性。使用此方法,在编写计算机软件或游戏时,可以更加简单方便地实现各种数学运算,减少错误的产生。

  
  

评论区

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