// Question 1
// Structure of Bracket Validation Problem
#include<stdio.h>
#include<stdlib.h>
char stack[10];
int top =-1;
void push(char);
void pop();
int eval(char[]);
int main()
{
char expr[30];
int result;
printf("\n Enter the expression");
scanf("%[^\n]s",expr);
printf("\n The input string is: %s",expr);
result = eval(expr);
if(result)
printf("\n It is a valid expression");
else
printf("\n It is an invalid expression.");
}
int eval(char expr[])
{
int i = 0,valid;
char ch;
while(expr[i]!='\0')
{
//If opening Bracket push it in the stack
//If closing Bracket pop from the bracket
i++;
}
if(top==-1)
valid = 1;
else
valid = 0;
return valid;
}
void push(char num)
{
//Push Algorithm
}
void pop()
{
//Pop algorithm
}
// Answer
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 30
char stack[MAX_SIZE];
int top = -1;
void push(char);
void pop();
int eval(char[]);
int main()
{
char expr[MAX_SIZE];
int result;
printf("\n Enter the expression: ");
scanf("%[^\n]s", expr);
printf("\n The input string is: %s", expr);
result = eval(expr);
if (result)
printf("\n It is a valid expression.");
else
printf("\n It is an invalid expression.");
return 0;
}
int eval(char expr[])
{
int i = 0, valid;
char ch;
while (expr[i] != '\0')
{
ch = expr[i];
if (ch == '(' || ch == '[' || ch == '{')
{
push(ch);
}
else if (ch == ')' || ch == ']' || ch == '}')
{
if (top == -1)
{
return 0;
}
char topBracket = stack[top];
if ((ch == ')' && topBracket == '(') ||
(ch == ']' && topBracket == '[') ||
(ch == '}' && topBracket == '{'))
{
pop();
}
else
{
return 0;
}
}
i++;
}
if (top == -1)
valid = 1;
else
valid = 0;
return valid;
}
void push(char ch)
{
if (top < MAX_SIZE - 1)
{
top++;
stack[top] = ch;
}
}
void pop()
{
if (top >= 0)
{
top--;
}
}