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]
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";
}
}
It works it just doesn't work correctly. I know it's my main program that is wrong I just cant figure out what.