Corchete de errores de corchete

Estoy tratando de hacer que los corchetes coincidan. Lo que se debe hacer coincidir es que se supone que ‘()’, ‘[]’, ‘{}’ y ‘[{}]’ dan como resultado verdadero. No quiero que funcione para los casos como ‘[{]}’ o ‘[{}’. Sin embargo, en este momento mi código no da un sí para la coincidencia correcta, incluso cuando debería ser cierto.

Código (actualizado):

int booleanBalanceBracket(aStack *theStack){ aStack *balanceStack = NULL; while(theStack){ if(theStack->token == '[' || theStack->token == '{' || theStack->token == '(') balanceStack = pushBracket(theStack->token, balanceStack); else if(theStack->token == ']' || theStack->token == '}' || theStack->token == ')'){ if(balanceStack == NULL) return 0; else balanceStack = popBracket(balanceStack); } theStack = theStack->nextItem; } if(balanceStack == NULL){ return 1; }else{ return 0; } } int isMatching(int token1, int token2){ if(token2 == '(' && token1 == ')') return 1; else if(token2 == '{' && token1 == '}') return 1; else if(token2 == '[' && token1 == ']') return 1; else return 0; } 

Pruebe este algoritmo simple:

 for each char c in the input if opener push on stack else if closer if stack is empty or doesn't match return false else remove top of stack return true if stack is empty, else false 

Esto puede optimizarse ligeramente para evitar las comprobaciones de stack vacía y también para evitar una comprobación explícita de EOF al empujar EOF en la stack inicialmente y hacer coincidir EOF con EOF.

Su problema de código es esta línea

 balanceStack = popBracket(balanceStack); 

No recibe un valor obtenido por pop. También es necesario comparar el valor reventado.

El ejemplo de una cadena simple

 bool booleanBaranceBracket(const char *s){ static const char *left = "{(["; static const char *right = "})]"; size_t len = strlen(s); char *p, stack[len]; int sp = -1; int i; for(i=0;i