作业帮 > 综合 > 作业

编写一个表达式中括号是否正确配对的算法

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/05/07 14:34:58
编写一个表达式中括号是否正确配对的算法
编写一个表达式中括号是否正确配对的算法
这是我编的,
#include "stdio.h"
#include "stdlib.h"
#define maxsize 100
typedef struct
{
\x05char*base;
\x05char*top;
\x05int size;
}stack;
void main()
{
\x05char L[maxsize];
\x05char*p;
\x05stack *S;
\x05int a,b,c,a1,b1,c1;
\x05a=b=c=a1=b1=c1=0;
S=(stack*)malloc(sizeof(stack));
S->base=(char*)malloc(maxsize*sizeof(char));
S->size=maxsize;
S->top=S->base;
printf("输入一个表达式存入L中:");
scanf("%s",L);
\x05p=L;
\x05while(*p)
{
\x05switch(*p)
\x05{
\x05\x05case '(' :a++;*S->top++=*p;break;
\x05\x05case ')' :a1++;if(S->top!=S->base&&a1==a){S->top--;a--;break;}
\x05\x05 else printf("配对不正确:\n");exit(0);
\x05\x05case '[' :b++;*S->top++=*p;break;
\x05\x05case ']' :b1++;if(S->top!=S->base&&b1==b){S->top--;b--;break;}
\x05\x05 else printf("配对不正确:\n");exit(0);
\x05\x05case '{' :c++;*S->top++=*p;break;
\x05\x05case '}' :c1++;if(S->top!=S->base&&c1==c){S->top--;c--;break;}
\x05\x05 else printf("配对不正确:\n");exit(0);
\x05\x05default :break;
\x05}
\x05p++;
}
\x05if(S->top==S->base)
\x05printf("配对正确:\n");
\x05else
\x05printf("配对不正确:\n");
}
再问: 可不可以不用case
再答: 那用if条件句 (S->top!=S->base&&a1==a)有点错误,应改为(S->top!=S->base&&a1==a&&a1>b&&a1>c) 下面的两句一样要改。这是“期待的急迫程度”问题。自己编的,不简洁,不过很容易理解。我在尝试改进一下,成功后再给你