使用堆栈时接收断言失败

时间:2018-10-02 00:34:27

标签: c++

我正在尝试比较这些符号(,[,{在用户输入的算术问题中。当所有符号都有匹配的对应符号,或者没有匹配的对应符号时,它会适当地响应用户。

使用了4个方程。

(((3 + 4) / {{999.7} - 9}));
Passed.
8 * 3 + 2 / (4) - 33 + 7 * 1 + 2;
Passed.
(4+3 - {2*2)}; 
Passed.
(4 + 4) - ({5 + (4 - 1/2)}));
Assertion 'stackTop != 0 failed.

我发现,通过消除符号'('的弹出声,可以使输出对以前的错误方程式给出正确的答案,并更改增量,但是,该程序随后对其他错误输出不正确。我很难弄清楚是什么原因导致了探查,但我也不是确切地了解断言错误的含义以及如何解决它。下面是代码。

#include<iostream>
#include<string>
#include<stdlib.h>
#include "myStack.h"

using namespace std;

int main()
{

    stackType<char> stack(15);

    char str[100];

    cout << "\n\tEnter your choice of an artihmetic expression:";
    cin.getline (str, 100, '\n');

    int i = 0;
    while (str[i] != '\0')
    {
        switch (str[i])
        {
            case '{' :
            case '[' :
            case '(' :
                stack.push(str[i]);
                break;
            case '}' :    if (stack.top() == '{')
                          stack.pop();
                          break;

            case ')' :    if (stack.top() == '(')
                          stack.pop();    
                          break;

            case ']' :    if (stack.top() == '[')
                          stack.pop();  
                          break;

        }
        i++;
    }

    if (stack.isEmptyStack() )
        cout << "Expression has matching grouping symbol";
    else
        cout << "Expression does not have matching grouping symbols";

    cout << "\n\n\t";
    return 0;
}

1 个答案:

答案 0 :(得分:0)

在空堆栈上调用top会引发该异常。

以下输入将首先显示顶部

)