使用堆栈来确定表达式是否具有平衡圆括号



我正在完成本学期的最后一项学校作业,我们是第一次被介绍到堆栈,但我的程序没有正确分析表达式,这让我遇到了问题。一切都在执行,但程序总是产生表达式不平衡的结果。有什么线索可以为我指明正确的方向吗?

//    
//  main.cpp
//  Balanced Parenthesis
#include "StringStack.h"
#include <iostream>
using namespace std;

int main ()
{
StringStack stack;
char entry;
    int parCounter = 0;
cout << "This program will accept a string and determine whether it has balanced        parenthesis.n";
cout << "Please type a sentence to be analyzedn";
while (cin.get (entry) && entry != 'n')
{
            stack.push(entry);
}
if (stack.isEmpty()) {
    cout << "The stack is empty./n";
}
else{
    stack.pop(entry);
    if (entry == ')') {
        parCounter++;
    }
    else if(entry == '('){
        parCounter--;
    }

}
if (parCounter > 0 || parCounter < 0){
            cout << "This expression has UNBALANCED parenthesesn";
        }
        else
        {
            cout << "This expression has BALANCED parenthesesn";
    }

return 0;
}
//  StringStack.h
//  Balanced Par
#include <iostream>
using namespace std;
#ifndef StringStack_h
#define StringStack_h

//Define our stack class and its contents
class StringStack
{
private:
    char *stackArray;
    int stackSize;
    char top;
public:
StringStack();
    ~StringStack() {delete[] stackArray;}
    void push(char);
    void pop(char &);
    bool isBalanced();
    bool isEmpty();
};
#endif
//Constructor
StringStack::StringStack()
{
    stackArray = new char[stackSize];
    top = 0;
}
//Function to determine if stack is empty.
bool StringStack::isEmpty()
{
    if (top == 0)
        return true;
    else
        return false;
}
//Function to push letters/puncuation onto the stack
void StringStack::push(char letter)
{
//if (isEmpty())
{
    top++;
    stackArray[top] = letter;
}
//else
//{
    //exit(1);
//}
}
//Function to pop letters/puncuation off the stack
void StringStack::pop(char &letter)
{
if (isEmpty())
{
    cout << "The stack is empty.n";
    exit(1);
}
else
{
    letter = stackArray[top];
    top--;
}
}

您没有在任何位置初始化或设置成员stackSize。这使得new char[stackSize]的行为没有定义,任何事情都可能发生。

修复后,您只检查堆栈的顶部。您需要一个围绕parCount的循环来控制if,直到堆栈为空。

最新更新