21xrx.com
2024-12-22 23:42:24 Sunday
登录
文章检索 我的文章 写文章
C++简单计算器(使用栈实现)
2023-07-04 19:51:22 深夜i     --     --
C++ 计算器 栈实现

计算器是现代生活中非常重要的工具,可以帮助我们解决各种数学问题。为了更好地掌握计算器的运作原理和实现,我们可以使用C++编写一个简单的计算器程序。在本文中,我们将展示如何使用栈实现一个基本的计算器程序,让读者能够更好地了解计算器的运作原理。

一、栈的介绍

在介绍如何使用栈实现计算器之前,我们需要先了解栈的概念。栈是一种后进先出(LIFO)的数据结构,与队列相对应。在栈结构中,最后插入的元素最先弹出,最先插入的元素最后弹出。

二、实现一个基本的计算器

下面我们将介绍如何使用栈实现一个基本的计算器程序。

首先,我们需要实现一个栈类,用于存储运算符和操作数。栈类应该具有以下方法:

1. void push(T value) - 将一个值压入栈顶

2. T pop() - 弹出栈顶值和返回该值

3. T top() - 返回栈顶值而不弹出

4. bool isEmpty() - 检查栈是否为空

其次,我们需要实现一个函数,用于将输入的表达式解析为可计算的形式。这个函数应该具有以下方法:

1. 将字符串转换为数字

2. 识别运算符和操作符

3. 计算表达式的值

函数的主要思想是从左到右扫描输入的表达式。如果扫描的项是一个操作数,则将其推入堆栈中;如果扫描的项是一个运算符,则根据其优先级进行处理。如果堆栈中的操作符的优先级高于当前的操作符,则弹出堆栈中的操作符,并将弹出的操作符应用于之前的操作数。

三、运行程序

运行程序时,用户应该能够输入一个完整的数学表达式,例如“2+3*4”,程序应该能够正确计算这个表达式并返回结果。

下面是实现一个基本的计算器程序的示例代码:

#include

#include

#include

using namespace std;

int main()

{

  stack nums;

  stack ops;

  string input;

  cout << "Please input your expression: " << endl;

  getline(cin, input);

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

    char c = input[i];

    if (isdigit(c)) {

      int num = 0;

      while (isdigit(c)) {

        num = num*10 + (c-'0');

        ++i;

        c = input[i];

      }

      nums.push(num);

    }

    if (c == '+' || c == '-' || c == '*' || c == '/') {

      if (!ops.empty()) {

        char top = ops.top();

        if ((c == '*' || c == '/') && (top == '+' || top == '-')) {

          ops.push(c);

        } else {

          ops.pop();

          int num2 = nums.top();

          nums.pop();

          int num1 = nums.top();

          nums.pop();

          if (top == '+') {

            nums.push(num1 + num2);

          } else if (top == '-') {

            nums.push(num1 - num2);

          } else if (top == '*') {

            nums.push(num1 * num2);

          } else if (top == '/') {

            nums.push(num1 / num2);

          }

          --i;

        }

      } else {

        ops.push(c);

      }

    }

  }

  while (!ops.empty()) {

    char op = ops.top();

    ops.pop();

    int num2 = nums.top();

    nums.pop();

    int num1 = nums.top();

    nums.pop();

    if (op == '+') {

      nums.push(num1 + num2);

    } else if (op == '-') {

      nums.push(num1 - num2);

    } else if (op == '*') {

      nums.push(num1 * num2);

    } else if (op == '/') {

      nums.push(num1 / num2);

    }

  }

  cout << nums.top() << endl;

  return 0;

}

运行上述程序,将会输入一个数学表达式,程序将会输出计算结果。

总结

在本文中,我们介绍了如何使用栈实现一个基本的计算器程序。这个程序可以帮助读者更好地理解计算器的运作原理,并且展示了如何使用栈来解决一个重要的算法问题。读者可以尝试运行程序,并进行一些实验来加深对栈数据结构的理解。

  
  

评论区

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