Search code examples
c++stringdouble

basic calculator, using Reverse Polish Notation


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);
}

Solution

  • 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);
    }