diff --git a/Others/Paranthesis Matching.cpp b/Others/Paranthesis Matching.cpp index 0347f38d0..25ee7287b 100644 --- a/Others/Paranthesis Matching.cpp +++ b/Others/Paranthesis Matching.cpp @@ -1,52 +1,63 @@ #include -#include #include -#include + using namespace std; -const int MAX = 100; +#define MAX 100 // -------------- stack -------------- char stack[MAX]; -int top=0; +int top = -1; -void push(char ch) -{ - stack[top++]=ch; +void push(char ch){ + stack[ ++top ] = ch; } -char pop() -{ - return stack[--top]; +char pop(){ + return stack[ top-- ]; } // -------------- end stack ----------- -int main() -{ +char opening(char ch){ + switch(ch){ + case '}': + return '{'; + case ']': + return '['; + case ')': + return '('; + case '>': + return '<'; + } +} + +int main(){ + string exp; + int valid = 1, i = 0; cout<<"Enter The Expression : "; cin >> exp; - for (int i = 0; i < exp.length(); i++) - { - if (exp[i]=='(' || exp[i]=='{' || exp[i]=='[' || exp[i]=='<') - { + + while (valid == 1 && i < exp.length()){ + if (exp[i] == '(' || exp[i] == '{' || exp[i] == '[' || exp[i] == '<'){ push(exp[i]); } - else if (exp[i]==')' || exp[i]=='}' || exp[i]==']' || exp[i]=='>') - { - pop(); + else if (top >= 0 && stack[top] == opening(exp[i])){ + pop(); } + else{ + valid = 0; + } + i++; } // makes sure the stack is empty after processsing (above) - if(top==0) - { - cout<<"Correct Expression"; + if (valid == 1 && top == -1){ + cout<<"\nCorrect Expression"; } - else - { + else{ cout<<"\nWrong Expression"; }