Я пробовал написать код, чтобы проверить, сбалансированы ли в парагенезе выражения, используя нижеследующую функцию. Может кто-то помочь мне понять, почему ниже функция возвращает 1 в случае сбалансированного выражения, когда это нигде не указано, для возврата 1.Возвращаемое значение функции в C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
struct Stack
{
int top;
unsigned capacity;
char* array;
};
struct Stack* createStack (unsigned capacity)
{
struct Stack* stack = (struct Stack*) malloc (sizeof(struct Stack));
if(!stack)
return NULL;
stack->top = -1;
stack->capacity = capacity;
stack->array = (char*) malloc(stack->capacity * sizeof(int));
if (!stack->array)
return NULL;
return stack;
}
int isEmpty(struct Stack* stack)
{
return (stack->top == -1);
}
void push(struct Stack* stack, char op)
{
stack->top++;
stack->array[stack->top] = op;
}
int pop(struct Stack* stack)
{
if (!isEmpty(stack))
return (stack->array[stack->top--]);
return '$';
}
int isMatchingPair(char char1 , char char2)
{
if (char1 == '(' && char2 == ')')
return 1;
else if (char1 == '[' && char2 == ']')
return 1;
else if (char1 == '{' && char2 == '}')
return 1;
else
return 0;
}
int paranthesesMatch(char* exp)
{
int i;
struct Stack* stack = createStack(strlen(exp));
for(i = 0; exp[i]; i++)
{
if (exp[i] == '(' || exp[i] == '[' || exp[i] == '{')
push(stack , exp[i]);
if (exp[i] == ')' || exp[i] == ']' || exp[i] == '}')
{
if (stack == NULL)
return 0;
else if (!isMatchingPair(pop(stack), exp[i]))
return 0;
}
}
}
int main()
{
char exp[100] = "{()}[)";
printf(" %d\n", paranthesesMatch(exp));
if (paranthesesMatch(exp) == 1)
printf("Balanced \n");
else
printf("Not Balanced \n");
return 0;
}
Edit: Добавлен полный код.
С помощью сбалансированного выражения вы имели в виду, что все открытые фигурные скобки закрыты? – sjsam
@sjsam: Да. Это то, что я имел в виду. – sank
Это может вернуть 0, а не 1. Я в недоумении. – user902384