-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRPNdecoder.cpp
65 lines (64 loc) · 1.51 KB
/
RPNdecoder.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <string>
#include <cmath>
#include "stackWithAccess.hpp"
int main(int argc, char *argv[]){
stackf dataStack;
bool running = true;
std::string input;
std::string valHolder = "";
float tmpVal;
while(running){
std::cout<<"Input: ";
std::getline(std::cin, input);
for (char s : input) {
switch (s) {
case 'e':
running = false;
break;
case '+':
dataStack.push(dataStack.pop() + dataStack.pop());
break;
case '-':
tmpVal = dataStack.pop(); // I need to switch the positions of pops
dataStack.push(dataStack.pop() - tmpVal);
break;
case '*':
dataStack.push(dataStack.pop() * dataStack.pop());
break;
case '/':
tmpVal = dataStack.pop(); // I need to switch the positions of pops
dataStack.push(dataStack.pop() / tmpVal);
break;
case '^':
tmpVal = dataStack.pop();
dataStack.push(std::pow(dataStack.pop(), tmpVal));
case ' ':
if (valHolder != "") {
dataStack.push(std::stof(valHolder));
valHolder = "";
}
break;
default:
if(s >= '.' && s <= '9'){
valHolder += s;
}
else{
std::cout<<"\nIncorrect input detected: "<<s<<'\n';
}
break;
}
}
if(dataStack.getSize() > 0){
std::cout<<"Output: "<<dataStack.pop()<<'\n';
}
if(dataStack.getSize() > 0){
std::cout<<"Wrong input: data left in stack: "<<dataStack.pop();
while(dataStack.getSize() > 0){
std::cout<<", "<<dataStack.pop();
}
std::cout<<'\n';
}
}
return 0;
}