输入形式:一个以@为结尾的算术表达式。
输出形式:若配对则输出圆括号的对数;否则输出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无用
悬赏问题
- ¥15 我的代码无法在vc++中运行呀,错误很多
- ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
- ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
- ¥30 ppOCRLabel导出识别结果失败
- ¥15 Centos7 / PETGEM
- ¥15 csmar数据进行spss描述性统计分析
- ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
- ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
- ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
- ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗