如果第二秒我出错了
如果for之外的功能看起来完全一样,那么它会从优先级函数返回值,但是当我尝试执行该操作时,它表示我试图将无效参数传递给一个函数,而该函数认为致命。
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int priority(char c);
int main()
{
stack<char>Operator;
string input;
string output;
getline(cin, input);
for (int i = 0; i < input.size(); i++)
{
if (input[i] == '(' || input[i] == ')' || input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/')
Operator.push(input[i]);
else
output.push_back(input[i]);
if (priority(Operator.top()) == 3)
{
int aux = Operator.top();
Operator.pop();
while (priority(Operator.top() == 4))
{
output.push_back((char)Operator.top());
Operator.pop();
}
Operator.push(aux);
}
if (priority(Operator.top() == 2))
{
Operator.pop();
while (priority(Operator.top()) != 1)
{
output.push_back(Operator.top());
Operator.pop();
}
Operator.pop();
}
}
cout << output;
cin.ignore();
cin.get();
return 0;
}
int priority(char c)
{
if (c == '(')
return 1;
if (c == ')')
return 2;
if (c == '+' || c == '-')
return 3;
if (c == '*' || c == '/')
return 4;
}
答案 0 :(得分:0)
正在对输入字符串中的每个符号调用语句Operator.top()
。如果您的字符串以'('
符号或一元加号开头,那可能会起作用,但是如果使用"2*2"
,会发生什么情况?
作为完美的解决方案,您应该重新设计代码以使其成为finit自动机。作为一个简单的临时解决方案,您应该检查当前符号是一个运算符还是数字,并且在后一种情况下不要调用Operator.top():
if (isdigit(input[i])) {
output.push_back(input[i]);
}
else {
Operator.push(input[i]);
if (priority(Operator.top()) == 3) {
// ...
}
// ...
}