输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。
2017-09-29 19:50
447 查看
输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。
#include<stdio.h>
#include<stdlib.h>
#define N 20
#define SIZE 20
#define MORE 10
typedef struct{
char *base;
int top;
int stacksize;
}SqStack;
void InitStack(SqStack &S){
//构造一个空栈
S.base=(char *)malloc(SIZE*sizeof(char));
if(!S.base) return ;
S.top=0;
S.stacksize=SIZE;
}
int StackEmpty(SqStack &S){
//判空 是返回1 否返回0
if(S.top==0) return 1;
else return 0;
}
void Push(SqStack &S,char e){
//入栈
if(S.top>=S.stacksize){
S.base=(char *)realloc(S.base,(S.stacksize+MORE)*sizeof(char));
if(!S.base) exit(0);
S.stacksize+=MORE;
}
S.base[S.top++]=e;
}
void Pop(SqStack &S,char &e){
//出栈
if(S.top==0) exit(0);
else
e=S.base[--S.top];
}
int AllBrackets_Test(char *str) {
//判别给定的表达式中三种括号是否匹配
char *p,ch;
SqStack S;
InitStack(S);
for(p=str;*p!='\0';p++){
if(*p=='(' || *p=='[' || *p=='{')
Push( S, *p );
else if(*p==')' || *p==']' || *p=='}'){
if(StackEmpty(S)) return 0;
Pop( S,ch );
if( *p==')' && ch!='(') return 0;
if( *p==']' && ch!='[') return 0;
if( *p=='}' && ch!='{') return 0;
}
}
if(!StackEmpty(S)) return 0;
else
printf("匹配!");
}
int main(){
char a
;
printf("输入一个表达式:\n");
gets(a);
AllBrackets_Test(a);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define N 20
#define SIZE 20
#define MORE 10
typedef struct{
char *base;
int top;
int stacksize;
}SqStack;
void InitStack(SqStack &S){
//构造一个空栈
S.base=(char *)malloc(SIZE*sizeof(char));
if(!S.base) return ;
S.top=0;
S.stacksize=SIZE;
}
int StackEmpty(SqStack &S){
//判空 是返回1 否返回0
if(S.top==0) return 1;
else return 0;
}
void Push(SqStack &S,char e){
//入栈
if(S.top>=S.stacksize){
S.base=(char *)realloc(S.base,(S.stacksize+MORE)*sizeof(char));
if(!S.base) exit(0);
S.stacksize+=MORE;
}
S.base[S.top++]=e;
}
void Pop(SqStack &S,char &e){
//出栈
if(S.top==0) exit(0);
else
e=S.base[--S.top];
}
int AllBrackets_Test(char *str) {
//判别给定的表达式中三种括号是否匹配
char *p,ch;
SqStack S;
InitStack(S);
for(p=str;*p!='\0';p++){
if(*p=='(' || *p=='[' || *p=='{')
Push( S, *p );
else if(*p==')' || *p==']' || *p=='}'){
if(StackEmpty(S)) return 0;
Pop( S,ch );
if( *p==')' && ch!='(') return 0;
if( *p==']' && ch!='[') return 0;
if( *p=='}' && ch!='{') return 0;
}
}
if(!StackEmpty(S)) return 0;
else
printf("匹配!");
}
int main(){
char a
;
printf("输入一个表达式:\n");
gets(a);
AllBrackets_Test(a);
return 0;
}
相关文章推荐
- 括号配对:假设一个数学算式中包括圆括号"()",方括号”[]"和花括号“{}”三种类型,编写一算法判断表达式的括号是否配对。
- 假设表达式中允许包括3中括号:(,[,{,设计一个算法采用顺序栈判断表达式中的括号是否正确配对
- 假设表达式中包含三种括号 圆括号方括号大括号 设计一个算法用顺序栈判断表达式中的括号是否正确配对
- 如何判断一个表达式中的左右括号是否匹配
- 栈的基本操作及如何判断一个表达式中的左右括号是否匹配
- 假设一个数学算法中包括圆括号(),方括号[],花括号{}三种类型,编写表达式的括号是否配对
- 利用栈判断输入的表达式中的括号是否匹配(假设只含有左、右括号)
- 判断一个括号字符串是否匹配正确,如果括号有多种,怎么做?如(([]))正确,[[(()错误。
- 检查一个算术表达式中的括号是否匹配
- 字符串——判断一个括号字符串是否匹配
- 判断表达式中的括号是否匹配
- 用栈判断表达式中的括号是否匹配
- 从标准输入获取C语言代码并判断花括号是否匹配
- 全部输入是小括号的字符串,判断是否匹配
- 常见算法题:判断表达式括号是否匹配
- 判断表达式括号是否匹配java和js版本
- zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。 输入 第一行只有一个正整数N(N<=
- 判断表达式左右括号是否匹配(栈)
- 如何判断一个字符串中的括号是否匹配
- 判断一个括号字符串是否匹配