21xrx.com
2024-12-22 23:08:27 Sunday
登录
文章检索 我的文章 写文章
C++栈实现计算器
2023-07-08 16:48:30 深夜i     --     --
C++ 计算器 实现

计算器是生活中经常用到的一个工具,实现计算器的功能一般有计算器程序和计算器硬件,而计算器程序的实现离不开数据结构和算法的支持。本文将介绍一种用C++栈实现计算器的方法。

栈是一种线性数据结构,其特点是后进先出(LIFO),即最后一个进入的元素最先弹出。计算器中遇到的运算符和数字可以用栈实现。

首先,我们需要定义一个数值栈和一个操作符栈。


#include <stack>

#include <string>

using namespace std;

stack<double> values; // 数值栈

stack<char> ops; // 操作符栈

接下来,我们需要实现一个计算函数。该函数将操作符栈中的运算符弹出,并根据运算符的优先级计算出相应的结果,然后将结果压入数值栈中。


double calculate(char op) {

  double num2 = values.top();

  values.pop();

  double num1 = values.top();

  values.pop();

  double result;

  switch (op) {

    case '+':

      result = num1 + num2;

      break;

    case '-':

      result = num1 - num2;

      break;

    case '*':

      result = num1 * num2;

      break;

    case '/':

      result = num1 / num2;

      break;

    default:

      break;

  }

  return result;

}

最后,我们需要编写一个主函数,从控制台输入一个算术表达式,并计算出其结果。


int main() {

  string expr;

  cout << "请输入算术表达式:";

  cin >> expr;

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

    char c = expr[i];

    if (isdigit(c)) {

      double num = c - '0';

      values.push(num);

    } else if (c == '+' || c == '-') {

      while (!ops.empty()) {

        char op = ops.top();

        if (op == '*' || op == '/') {

          double result = calculate(op);

          values.push(result);

          ops.pop();

        } else

          break;

        

      }

      ops.push(c);

    } else if (c == '*' || c == '/') {

      ops.push(c);

    } else if (c == '(') {

      ops.push(c);

    } else if (c == ')') {

      while (ops.top() != '(') {

        char op = ops.top();

        double result = calculate(op);

        values.push(result);

        ops.pop();

      }

      ops.pop();

    }

  }

  while (!ops.empty()) {

    char op = ops.top();

    double result = calculate(op);

    values.push(result);

    ops.pop();

  }

  cout << "计算结果为:" << values.top() << endl;

  return 0;

}

以上就是用C++栈实现计算器的方法。虽然本方法仅实现了基本的加减乘除运算,但是结合其他算法和数据结构,我们可以实现更复杂的计算器功能。

  
  

评论区

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