C программа для проверки балансировки парантеза
Я сделал c proram ,чтобы проверить балансировку paranthesis ,и он не показывает никакой ошибки и никакого предупреждения, но я не получаю никакого вывода, пожалуйста, это будет действительно полезно, если вы, ребята, можете помочь мне, я новичок в программировании
К сведению, у меня есть сомнения в функции checkbalanced все кажется правильным для меня
Что я уже пробовал:
#include<stdio.h> #include<stdlib.h> #include<string.h> struct Stack{ int top; int capacity; int *array; }; struct Stack* createstack(int capacity){ struct Stack* stack=(struct Stack*)malloc(sizeof(struct Stack)); if(!stack) return NULL; stack->top=-1; stack->capacity=capacity; stack->array=(int*)malloc(sizeof(int)*stack->capacity); if(!stack->array) return NULL; return stack; } int isempty(struct Stack* stack){ return stack->array[stack->top--]; } char pop(struct Stack* stack){ return stack->array[stack->top--]; } void push(struct Stack* stack,char exp){ stack->array[++stack->top]=exp; } char peek(struct Stack* stack){ return stack->array[stack->top]; }
функция проверки соответствия парантеза в верхней части стека и exp[i]
int ismatchingpair(char char1,char char2){ if(char1=='('&&char2==')') return 1; if(char1=='['&&char2==']') return 1; if(char1=='{'&&char2=='}') return 1; return 0; }
функция проверки балансировки парантеза
int checkBalanced(char *exp){ struct Stack* stack=createstack(strlen(exp)); if(!stack) return NULL; for(int i=0;exp[i];++i){ if(exp[i]=='('||exp[i]=='{'||exp[i]=='[') push(stack,exp[i]); else if(exp[i]==')'||exp[i]=='}'||exp[i]==']') { if(isempty(stack)||!ismatchingpair(peek(stack),exp[i])) return -1; else pop(stack); } } printf("parenthesis are balanced"); }
основная функция
int main() { char exp[50]="(){}"; checkBalanced(exp); return 0; }