[英]Debug Assertion Failed in for
如果我在第二次遇到错误
如果在 for 之外进行完全相同的操作似乎可以正常工作,它会从优先级 function 返回值,但是当我尝试这样做时,它说我正在尝试将无效参数传递给 function,它认为它是致命的。
#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;
}
正在对输入字符串中的每个符号调用语句Operator.top()
。 如果您的字符串以'('
符号或一元加号开头,这可能会起作用,但是在"2*2"
的情况下会发生什么?
作为一个完美的解决方案,您应该重新设计代码以使其成为有限自动机。 作为一个简单的临时修复,您应该检查当前符号是操作还是数字,并且在后一种情况下不要调用 Operator.top():
if (isdigit(input[i])) {
output.push_back(input[i]);
}
else {
Operator.push(input[i]);
if (priority(Operator.top()) == 3) {
// ...
}
// ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.