C++ HP-35计算器基本功能的代码

C++ HP-35计算器基本功能的代码,c++,C++,您好,我在为HP-35型计算器实现基本函数时遇到了一些问题。我是一名初学者,在编写代码时遇到了很多问题。基本函数是加法、减法、乘法和除法,我需要帮助 以下是我的主要文件: /* * File: main.cpp * Author: Brenton * * Created on 20 September 2013, 12:10 AM */ #include <cstdlib> #include "HPStack.h" #include <iostream> #inc

您好,我在为HP-35型计算器实现基本函数时遇到了一些问题。我是一名初学者,在编写代码时遇到了很多问题。基本函数是加法、减法、乘法和除法,我需要帮助

以下是我的主要文件:

/* 
* File:   main.cpp
* Author: Brenton
*
* Created on 20 September 2013, 12:10 AM
*/

#include <cstdlib>
#include "HPStack.h"
#include <iostream>
#include <sstream>
using namespace std;

/*
* 
*/
int main(int argc, char** argv) {
HPStack stack;
string line;
while (getline(cin, line)) {
stringstream expression(line);

string token;

while (expression >> token) {
if (isdigit(token[0])) {
stack.push(atof(token.data()));

//From here I am having trouble, I don't know what the code is.

} else if (token == "+") { // Addition code

} else if (token == "-") { // Subtraction code

} else if (token == "/") { // Division code

} else if (token == "*") { // Multiplication code

double x = stack.pop();
double y = stack.pop();
stack.push(y + x);
}
}
cout << stack.peek();
}
return 0;
}
下面是我的头文件代码:

/* 
* File:   HPStack.h
* Author: Brenton
*
* Created on 20 September 2013, 12:10 AM
*/

#ifndef HPSTACK_H
#define HPSTACK_H

class HPStack {
public:
HPStack();
void push(double);
double pop();


private:
double stack;
double x, y, z, t;

};

#endif /* HPSTACK_H */
我知道这似乎是一个愚蠢的问题,但我真的不知道我在用数学代码做什么,但我正在尝试。
任何帮助都将不胜感激

这是一个非常普通的问题,但是假设HP35是RPN计算器,那么加法代码只需从堆栈中弹出两个值,将它们相加,然后将结果推回到堆栈中。减法功能类似,只需确保按正确的顺序进行减法即可

显然,您还需要完成堆栈的实现。如果你正在使用C++,并且你不打算增加额外的功能,那么只需使用<代码> STD::Stase,


从维基百科上看,它似乎不是RPN计算器。我想您一定是在尝试处理运算符优先级问题吧?

这可能无法完全回答您的问题,但通过一个示例,可能会为您提供大致的轮廓

原始表达式

( ( 1 + 2) * 3 ) + 4 )
树表示法

      +
     / \
    *   4
   / \
  +   3
 / \
1   2
堆栈表示法(从顶部推动/弹出):

处理堆栈

( ( 1 + 2) * 3 ) + 4 )
您可以一步一步地处理此堆栈。其目的是将堆栈减少到一个值,这就是答案。在每一步中,检查堆栈顶部的三个值-顶部的两个值应为数值,第三个值应为应用于这两个值的运算符

步骤1:将1,2+替换为3,使堆栈保持为:

3
3
*
4
+
9
4
+
步骤2:将3,3、*替换为9,这将使堆栈保持为:

3
3
*
4
+
9
4
+
步骤3:将9,4+替换为13。因为堆栈上只有一个值,这就是答案


因此,这显示了堆栈表示的外观,以及如何处理堆栈以获得答案。它没有显示如何解析文本表达式以便最初设置堆栈(我不知道这一点!)。

除了明显的“+”符号之外,我真的不知道添加代码是什么,&我真的不知道如何使用弹出和推送函数,我只是猜测“+”符号可能是您实际想要的。因此,代码类似于
stack.push(stack.pop()+stack.pop())减法稍微有点困难。@Brenton:如果这确实是一个RPN计算器,你可以按照下面的例子:POP2数字、加法、返回结果。对其他运营商也要这样做;如果输入是正确的,您将得到一个只包含结果的堆栈。显然,这种方法可以将其转换为正确的反向波兰符号形式,以便在堆栈上继续: