Hi GuyZ,
Evaluation of Expression for Bracket Matching using C++ is another application of `STACK` data structure. This is another question you may have to solve during your BE/B.Tech/MCA graduation.
Evaluation of Expression for Bracket Matching using C++ is another application of `STACK` data structure. This is another question you may have to solve during your BE/B.Tech/MCA graduation.
Solution
#include <iostream>
#include <vector>
using namespace std;
/*
Bracket Matching in C++
Coded By Ajith Kp (C) http://www.terminalcoders.blogspot.com
*/
template <typename T>
class stack{
vector<T> v;
public:
void push(T c){
v.push_back(c);
}
T pop(){
T top = v.back();
v.pop_back();
return top;
}
int empty(){
if(v.empty()){
return 1;
}
return 0;
}
};
class bracketMatch{
char str[1024], *ptr;
stack<char> s;
public:
void read(){
cout<<"Enter expression: ";
cin.getline(str, 1024);
}
void check(){
ptr = str;
int err = 0;
char top;
while(*ptr!='\0'){
switch(*ptr){
case '{':
case '(':
case '[':
s.push(*ptr);
break;
case '}':
if(s.empty()){
err = 2;
}
else if((top=s.pop())!='{'){
err = 1;
}
break;
case ')':
if(s.empty()){
err = 2;
}
else if((top=s.pop())!='('){
err = 1;
}
break;
case ']':
if(s.empty()){
err = 2;
}
else if((top=s.pop())!='['){
err = 1;
}
break;
}
if(err==1){
cout<<"Error: You haven't closed "<<top<<" before "<<*ptr<<endl;
return;
}
else if(err==2){
cout<<"Error: You haven't opened ";
if(*ptr==']'){
cout<<"[";
}
else if(*ptr=='}'){
cout<<"{";
}
else if(*ptr==')'){
cout<<"(";
}
cout<<" to close"<<endl;
return;
}
ptr++;
}
if(!s.empty()){
cout<<"Error: You haven't closed ";
while(!s.empty()){
cout<<s.pop()<<" ";
}
cout<<" correctly"<<endl;
}
else{
cout<<"Success: Your expression is correct"<<endl;
}
}
};
int main(){
bracketMatch bm;
bm.read();
bm.check();
}
