#include <stdio.h>
#include <stdlib.h>
typedef struct stack stack;
struct stack {
char brace ;
stack * next ;
} *top = NULL ;
void push ( char val )
{
stack
* ptr
= (stack
*) malloc(sizeof(stack
)) ; ptr -> brace = val ;
ptr -> next = top ;
top = ptr ;
}
char pop ()
{
stack * ptr ;
char ch ;
ptr = top ;
ch = top -> brace ;
top = top -> next ;
return ch ;
}
char close(char ch)
{
if(ch==']')
return '[' ;
if(ch=='}')
return '{' ;
if(ch==')')
return '(' ;
return ' ' ;
}
int check_order (char * str)
{
int i , len = 0 ;
for(i=0;str[i]!='\0';i++)
len++ ;
if(len&1) // if string length is odd
return 0 ;
for(i=0;i<len;i++)
{
if(str[i]=='[' || str[i]=='{' || str[i]=='(')
push(str[i]);
else {
if(pop() != close(str[i]))
return 0 ;
}
}
return 1 ;
}
int main()
{
char str[100] ;
printf("Enter the string expression: "); printf("The expression you entered is: %s .\n",str
); if( check_order(str) )
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KdHlwZWRlZiBzdHJ1Y3Qgc3RhY2sgc3RhY2s7CnN0cnVjdCBzdGFjayB7CiAgICBjaGFyIGJyYWNlIDsKICAgIHN0YWNrICogbmV4dCA7Cn0gKnRvcCA9IE5VTEwgOwoKdm9pZCBwdXNoICggY2hhciB2YWwgKQp7CiAgICBzdGFjayAqIHB0ciA9IChzdGFjayAqKSBtYWxsb2Moc2l6ZW9mKHN0YWNrKSkgOwogICAgcHRyIC0+IGJyYWNlID0gdmFsIDsKICAgIHB0ciAtPiBuZXh0ID0gdG9wIDsKICAgIHRvcCA9IHB0ciA7Cn0KCmNoYXIgcG9wICgpCnsKICAgIHN0YWNrICogcHRyIDsKICAgIGNoYXIgY2ggOwogICAgcHRyID0gdG9wIDsKICAgIGNoID0gdG9wIC0+IGJyYWNlIDsKICAgIHRvcCA9IHRvcCAtPiBuZXh0IDsKICAgIGZyZWUgKHB0cikgOwogICAgcmV0dXJuIGNoIDsKfQoKY2hhciBjbG9zZShjaGFyIGNoKQp7CiAgICBpZihjaD09J10nKQogICAgICAgIHJldHVybiAnWycgOwogICAgaWYoY2g9PSd9JykKICAgICAgICByZXR1cm4gJ3snIDsKICAgIGlmKGNoPT0nKScpCiAgICAgICAgcmV0dXJuICcoJyA7CiAgICByZXR1cm4gJyAnIDsKfQppbnQgY2hlY2tfb3JkZXIgKGNoYXIgKiBzdHIpCnsKICAgIGludCBpICwgbGVuID0gMCA7CiAgICBmb3IoaT0wO3N0cltpXSE9J1wwJztpKyspCiAgICAgICAgbGVuKysgOwogICAgaWYobGVuJjEpICAvLyBpZiBzdHJpbmcgbGVuZ3RoIGlzIG9kZAogICAgICAgIHJldHVybiAwIDsKICAgIGZvcihpPTA7aTxsZW47aSsrKQogICAgewogICAgICAgIGlmKHN0cltpXT09J1snIHx8IHN0cltpXT09J3snIHx8IHN0cltpXT09JygnKQogICAgICAgICAgICBwdXNoKHN0cltpXSk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKHBvcCgpICE9IGNsb3NlKHN0cltpXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gMCA7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDEgOwp9CmludCBtYWluKCkKewogICAgY2hhciBzdHJbMTAwXSA7CiAgICBwcmludGYoIkVudGVyIHRoZSBzdHJpbmcgZXhwcmVzc2lvbjogIik7CiAgICBzY2FuZigiJXMiLHN0cik7CiAgICBwcmludGYoIlRoZSBleHByZXNzaW9uIHlvdSBlbnRlcmVkIGlzOiAlcyAuXG4iLHN0cik7CiAgICBpZiggY2hlY2tfb3JkZXIoc3RyKSApCiAgICAgICAgcHJpbnRmKCJSaWdodCBPcmRlciIpOwogICAgZWxzZSBwcmludGYoIldyb25nIE9yZGVyIik7CiAgICByZXR1cm4gMDsKfQo=