**
7-3 括号匹配 (15 分)
**
给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入格式:
输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。
输出格式:
如果括号配对,输出yes,否则输出no。
输入样例1:
sin(10+20)
//结尾无空行
输出样例1:
yes
//结尾无空行
输入样例2:
{[}]
//结尾无空行
输出样例2:
no
//结尾无空行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef enum { push, pop, end } Operation;
typedef enum { false, true } bool;
typedef int ElementType;
typedef int Position;
typedef int Status;
typedef struct Node{
ElementType *Data;
Position Top;
int MaxSize;
} SNode,*Stack;
Stack CreateStack(int MaxSize ){//创建栈
Stack S = (Stack)malloc(sizeof(SNode));
S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
S->Top = -1;
S->MaxSize = MaxSize;
return S;
}
void Push( Stack S, ElementType x){//入栈
if(S->Top+1!=S->MaxSize){
S->Top++;
S->Data[S->Top]=x;
}
}
ElementType Pop(Stack S){//出栈
int a;
if(S->Top!=-1){
a=S->Top;
S->Top--;
return S->Data[a];
}
else
return 0;
}
void cha(Stack S,char a[100]){
int i=0,flag=0;
char b;
while (a[i]) {
if(a[i]=='('||a[i]=='['||a[i]=='{'){
Push(S, a[i]);
}
else if (a[i]==')'){
b=Pop(S);
if(b!='('){
flag=0;
}
else{
flag=1;
}
}
else if (a[i]==']'){
b=Pop(S);
if(b!='['){
flag=0;
}
else{
flag=1;
}
}
else if (a[i]=='}'){
b=Pop(S);
if(b!='{'){
flag=0;
}
else{
flag=1;
}
}
i++;
//printf("a");
}
if(flag==1&&S->Top==-1)
printf("yes");
else
printf("no");
}
int main(){
Stack S;
char a[1000];
gets(a);
//建立栈
S=CreateStack(1000);
cha(S, a);
return 0;
}