我试图解析以下表达式,但是由于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;
}
答案 0 :(得分:1)
问题在这一行:
s.push(static_cast<char>(mul));
当乘法结果大于9时,尝试将其强制转换为char会产生意外结果。
解决方案通常是使用两个单独的堆栈,一个用于操作数(它将包含整数),另一个用于运算符(将包含char)。由于您只将操作数推入堆栈,因此只需将堆栈的类型从char更改为int,然后将类型转换为char即可,然后再推入堆栈并从堆栈中弹出后减去“ 0”。