我必须做一个函数来检测表达式中'('和')'的数量是否相等。由于这是针对大学要求使用简单的链接列表与LIFO方法。 这是我的代码(它不完全是英文,如果这是我可以翻译的问题)
int balance (char * EXPRESION)
{
int contador=0,flag=0,abre=0,cierra=0,devuelve=0;
char fin='a',letra=0;
nodo_t *H=NULL;
printf ("HELLO\n");
while (fin != '\0');
{
printf ("HELLOOOOOOOOO\n");
fin = EXPRESION[contador];
pila_push (&H,fin);
contador++;
}
while (flag != 1)
{
flag = pila_pop (&H,&letra);
if (flag != 1)
{
if (letra == '(')
{
abre++;
}
if (letra == ')')
{
cierra++;
}
}
}
if (abre==cierra)
{
devuelve=1;
}
else
{
devuelve=0;
}
return devuelve;
}
函数pila_push只是将一个节点添加到列表中,函数pila_pop是删除列表的第一个节点并返回读取的字符(当列表中没有节点时返回1)
由于表达式是一个字符串,我希望它以“\ 0”结束,但是当我执行程序时,它会在第一个时挂起而永远不会进入它。
非常感谢您的帮助。
这是我输入表达式来测试程序的方法:
int main (void)
{
int aux=0;
char expresion[10];
printf ("Ingrese la expresion: ");
__fpurge(stdin);
scanf ("%s",expresion);
aux = balance (expresion);
if (aux == 1)
{
printf ("La expresion esta balanceada \n");
}
else
{
printf ("La expresion no esta balanceada \n");
}
return 0;
}
这是添加了两个printfs的程序输出:
Ingrese la expresion:abc 你好 (它挂在这里)