繁体   English   中英

调试断言失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM