For this code Im using a class for a stack. I want to read a string then push any open brackets on to the stack and pop the closing brackets off. If there are no brackets then I want it to ignore the string. Then I want it to display if they have been used properly. I test them with these:
a+b
(a-b)
((c-d)
{e-f/[g+h]}
(s+t]
It works it just doesn't work correctly. I know it's my main program that is wrong I just cant figure out what.Code:#include <iostream> using namespace std; const int DefaultListSize = 50; typedef char Elem; class Astack { private: int top; /*Index for top element*/ int size; /*Maximum size of stack*/ Elem*listArray; /*Array holding stack elements*/ public: Astack(int sz =DefaultListSize) /*Constructor*/ {size = sz; top = 0; listArray = new Elem[sz];} ~Astack() { delete [] listArray;} /*Destructor*/ void clear() {top = 0;} bool push(const Elem& item){ if(top == size) return false; /* Stack is full*/ else {listArray [top++] = item; return true; } } bool pop(Elem& item){ /*Pop top element*/ if(top == 0) return false; else {item = listArray[--top]; return true; } } bool topValue(Elem& item) const { /*Return top element*/ if (top == 0) return false; else {item = listArray[top - 1]; return true; } } int length() const {return top;} bool IsEmpty() const {if(top == 0) return true; else return false; } }; bool Opener(char ch){ if((ch == '(') || (ch =='[') || (ch =='{')) return true; else return false; }/*end of opener*/ bool Match(char Lc, char Rc){ if(( Lc == '(') && (Rc == ')') || ((Lc == '[') && (Rc == ']')) ||((Lc == '{') && (Rc == ']'))) return true; else return false; }/*end of Match*/ bool Closer(char ch){ if((ch == ')') || (ch == ']') || (ch == '}')) return true; else return false; }/*end of closer*/ int main(){ Astack S; char s; cout <<"Enter data:"; cin >> s; if(Opener (s)){ S.push (s); } if(Closer (s)){ S.pop (s); } while(cin >> s){ if(Match){ cout << "Grouping symbols used properly"; } else cout << "Unmatched grouping symbols"; } }



LinkBack URL
About LinkBacks



