I'm trying to make a basic calculator, using Reverse Polish Notation that gets input from string
and outputs a double
. Input is: 82+5*8-4/
what should be read as (((8 + 2) * 5) - 8) / 4
in Standard notation.
The wanted output is 10.5 but my output is 106.962.
Can you explain to me what I'm doing wrong?
As far as i can see I'm doing something wrong in the string to double switch, but i am a novice in C++ and i don't know what the problem is exactly.
Here's what I tried:
#include <iostream>
int main() {
std::string input = "82+5*8-4/";
double output, num;
num = input.at(0);
for (int i = 1; i < input.size() - 1; i = i + 2) {
switch (input.at(i + 1)) {
case '+':
output = num + input.at(i);
break;
case '-':
output = num - input.at(i);
break;
case '*':
output = num * input.at(i);
break;
case '/':
output = num / input.at(i);
break;
default:
break;
}
num = output;
}
std::cout << output << std::endl;
return (0);
}
Using the comments, i got it working now:
#include <iostream>
int main() {
std::string input = "82+5*8-4/";
double output, num1;
num1 = input[0] - '0';
for (int i = 1; i < input.size() - 1; i = i + 2) {
double num2 = input[i] - '0';
switch (input.at(i + 1)) {
case '+':
output = num1 + num2;
break;
case '-':
output = num1 - num2;
break;
case '*':
output = num1 * num2;
break;
case '/':
output = num1 / num2;
break;
default:
break;
}
num1 = output;
}
std::cout << output << std::endl;
return (0);
}