gpt4 book ai didi

c++ - 我正在用c++创建一个具有撤消和清除功能的计算器。使用堆栈

转载 作者:行者123 更新时间:2023-12-02 10:22:56 24 4
gpt4 key购买 nike

对于我的作业,我需要使用堆栈制作计算器。我得到了加减乘的部分。我想撤消我只是弹出堆栈,为了清楚起见,我可以在堆栈的顶部添加一个0,但是每次用户输入U或C时,程序都会崩溃,因为用户输入应该为int。

输出:

=>1
2
+
=>3
2
-
=>1
9
*
=>9
9
/
=>1
u
=>9
c
=>0
#include <iostream>
#include <sstream>
#include <stack>

using namespace std;

int add(int a, int b)
{
int x;
x = a + b;
return x;
}

int sub(int a, int b)
{
int x;
x = a - b;
return x;
}

int multi(int a, int b)
{
int x;
x = a * b;
return x;
}

int divide(int a, int b)
{
int x;
x = a / b;
return x;
}

int main()
{
stack<int>math;
char ASMD;
int x = 0;
int a = 0;
int b = 0;
bool control = false;

math.push(x);

cout << "=> " << math.top() << endl;

while (control == false)
{
cin >> b;
cin >> ASMD;
a = math.top();

switch (ASMD)
{
case '+':
{
x = add(a, b);
break;

}
case '-':
{
x = sub(a, b);
break;
}
case '*':
{
x = multi(a, b);
break;
}
case '/':
{
if (b != 0)
{
x = divide(a, b);
break;
}
else
{
cout << "error: can't divide my 0" << endl;
break;
}

}

default:
{
control = true;
break;
}

}

math.push(x);
cout << "=> " << math.top() << endl;

}
return 0;

}

最佳答案

如果您要实现计算器,请使用Shunting Yard算法。该算法的工作方式与交换两个数组中的位置的方式相同,不同之处在于,它不是使用单个单元格作为临时存储,而是使用堆栈。最终结果是将人类可读的表达方式(后缀表示法)转换为计算机可执行的表达方式(后缀表示法)。例如,调车场会将此中缀表达式“1 +1”转换为“1 1 +”。后缀表达式存储在堆栈中,并通过从后缀堆栈中弹出元素直到到达运算符来进行评估。带运算符并将其应用于已经弹出的数字。这是一个超简短的概述,因此还有更多内容:

罗塞塔代码:http://www.rosettacode.org/wiki/Parsing/Shunting-yard_algorithm
Wiki:https://en.wikipedia.org/wiki/Shunting-yard_algorithm

我已经实现了几次,所以如果您需要更多帮助,请询问!

关于c++ - 我正在用c++创建一个具有撤消和清除功能的计算器。使用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59292259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com