堆栈后修复解析

时间:2019-06-28 17:40:13

标签: c++

我试图解析以下表达式,但是由于char int转换,我总是得到负值。 我试图一一解析该字符串,然后从堆栈中推送pop,但是不知道从哪里得到负值。 有人能告诉我哪里很大

#include<iostream>
#include<string>
#include<cmath>
#include <vector>
#include <stack>
using namespace std;


int main() {

    string S = "13+62*7+*";
    stack<char> s;
    for (int i = 0; i < S.size(); i++)
    {   

        if (S[i] == '+' && !s.empty())
        {   
            int d1 = (int)s.top() -'0';
            s.pop();
            int d2 = (int)s.top()-'0';
            s.pop();
            int sum = d1 + d2;
            s.push(sum);
        }
        else if (S[i] == '*' &&!s.empty())
        {
            int d1 = (int)s.top() - '0';
            s.pop();
            int d2 = (int)s.top()-'0';
            s.pop();
            int mul = d1 * d2;
            s.push(static_cast<char>(mul));
        }
        else
        {
            s.push(S[i]);

        }
    }


    return 0;
}

1 个答案:

答案 0 :(得分:1)

问题在这一行:

  s.push(static_cast<char>(mul));

当乘法结果大于9时,尝试将其强制转换为char会产生意外结果。

解决方案通常是使用两个单独的堆栈,一个用于操作数(它将包含整数),另一个用于运算符(将包含char)。由于您只将操作数推入堆栈,因此只需将堆栈的类型从char更改为int,然后将类型转换为char即可,然后再推入堆栈并从堆栈中弹出后减去“ 0”。