【发布时间】:2019-02-26 14:10:12
【问题描述】:
我尝试使用数组堆栈在 c 中编写一个括号检查器。该代码不会给出错误消息,但有时会给出正确的输出,有时会给出错误的输出。 非常感谢我如何改进代码或任何其他建议。我是初学者 C 程序员。 我试图将输入作为字符串但无法做到。有什么建议吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 25
int top = -1;
char stack[MAX];
void push(char x)
{
if(top == MAX - 1){
printf("Stack Overflow\n");
return;
}
stack[++top] = x;
}
char pop()
{
char popped;
if(top == -1) {
printf("Stack Underflow\n");
return 0;
}
popped = stack[top];
--top;
return popped;
}
char Top()
{
return (stack[top]);
}
int arePair(char opening,char closing)
{
if(opening =='(' && closing == ')') return 1;
else if((opening =='{' && closing == '}')) return 1;
else if (opening =='[' && closing == ']') return 1;
return 0;
}
int paranthesesBalanced(char *exp,int size)
{
for (int i=0;i<size;i++)
{
if(exp[i] == '(' || exp[i] == '{' || exp[i] == '[')
push(exp[i]);
else if (exp[i] == ')' || exp[i] == '}'|| exp[i] == ']')
{
if(top == -1 || !arePair(Top(),exp[i]))
return 0;
else
pop();
}
}
return (top == -1 ? 1:0);
}
int main()
{
char exp[25];
int size=0;
printf("Enter the size of
expression\n");
scanf("%d",&size);
printf("Enter the expression(Less than
25 characters): \n");
//scanf("%[ˆ\n]%",exp);
for (int i=0;i<size;i++)
{
scanf("%c",&exp[i]);
}
if(paranthesesBalanced(exp,size))
printf("Balanced!\n");
else
printf("Not Balanced!\n");
}
【问题讨论】:
-
从输入开始:什么时候它会给你错误输出吗?
-
当我输入
()时它给出的不平衡 -
您是否尝试过在各个点使用尽可能多的打印语句来检查哪里出了问题,或者使用笔和纸检查整个事情 - 否则使用调试器。
-
我没有这样做。我不知道如何使用调试器。有什么建议吗?
-
@dsaharia 如果您的系统上安装了 GDB(检查在终端上运行 gdb --version),那么这里有一个链接:youtube.com/watch?v=sCtY--xRUyI 否则使用多个打印语句,这也将帮助您.
标签: c stack stack-overflow parentheses brackets