首页 > 解决方案 > 基本计算器,使用逆波兰表示法

问题描述

我正在尝试制作一个基本的计算器,使用stringdouble. 输入是:82+5*8-4/应该按照(((8 + 2) * 5) - 8) / 4标准表示法读取的内容。

想要的输出是 10.5,但我的输出是 106.962。

你能向我解释我做错了什么吗?

据我所见,我在双重切换的字符串中做错了,但我是 C++ 的新手,我不知道问题到底出在哪里。

这是我尝试过的:

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

标签: c++stringdouble

解决方案


使用评论,我现在开始工作了:

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

推荐阅读