text: #include <iostream>
  #include <string>
  
  using namespace std;
  
  #define MAX 100
  
  // -------------- stack --------------
  
  char stack[MAX];
  int top = -1;
  
  void push(char ch)
  {
  	stack[++top] = ch;
  }
  
  char pop()
  {
  	return stack[top--];
  }
  
  // -------------- end stack -----------
  
  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;
  
  	while (valid == 1 && i < exp.length())
  	{
  		if (exp[i] == '(' || exp[i] == '{' || exp[i] == '[' || exp[i] == '<')
  		{
  			push(exp[i]);
  		}
  		else if (top >= 0 && stack[top] == opening(exp[i]))
  		{
  			pop();
  		}
  		else
  		{
  			valid = 0;
  		}
  		i++;
  	}
  
  	// makes sure the stack is empty after processsing (above)
  	if (valid == 1 && top == -1)
  	{
  		cout << "\nCorrect Expression";
  	}
  	else
  	{
  		cout << "\nWrong Expression";
  	}
  
  	return 0;
  }
  