输入形式:一个以@为结尾的算术表达式。
输出形式:若配对则输出圆括号的对数;否则输出no
样例输入:(a+b)/(c+d)@ 输出:2
#include <stdio.h>
#include <stdlib.h>
#define max 100
typedef struct sta
{
char data[max];
int top;
} stack;
stack* init()
{
stack s=(stack)malloc(sizeof(stack));
s->top=-1;
return s;
}
int empty(stack s)
{
if(s->top==-1)
return 1;
else return 0;
}
int push(stack s,char x)
{
if(s->top==max-1) return -1;
else
{
s->top++;
s->data[s->top]=x;
return 1;
}
}
int pop(stack* s,char *x)
{
if(empty(s)) return 0;
else
{
*x=s->data[s->top];
s->top--;
return 1;
}
}
int result()
{
char x;int flag=1,flag1=1;
stack *s=init();
while((x=getchar())!=EOF)
{
if(x=='(')
flag=push(s,x);
if(x==')')
flag1=pop(s,&x);
}
if(empty(s)&&flag==1&&flag1==1) return 1;
else return -1;
}
int main()
{
int flag;
flag=result();
if(flag==1)
printf("1");
else printf("0");
return 0;
}

C语言 设计一个算法判别一个算术表达式的圆括号是否正确配对
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- _GX_ 2022-09-29 21:21关注
#include <stdio.h> int main() { char ch; int n = 0, depth = 0, matched = 1; while (((ch = getchar()) != EOF) && (ch != '@')) { if (ch == '(') { n++; depth++; } else if (ch == ')') { if (depth == 0) { matched = 0; break; } else { depth--; } } } if (depth != 0) matched = 0; if (matched) printf("%d\n", n); else printf("no\n"); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用