题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入
输入数据有多组,处理到文件结束。
输出
如果匹配就输出“yes”,不匹配输出“no”
示例输入
sin(20+10){[}]
示例输出
yesno
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
#define OK 1
#define OVERFLOW -1
#define ERROR -2
typedef int SElemType;
struct stack
{
SElemType base;//栈底指针
char a[51];
SElemType top; //栈顶指针
int stacksize;//当前已分配的存储空间,以元素为单位
}SqStack;
int match(char c1,char c2)//判定两括号是否匹配;
{
if((c1=='('&&c2==')')||(c1=='{'&&c2=='}')||(c1=='['&&c2==']'))
return 1;
else
return 0;
}
int matching(char *str)//指针变量str括号是否匹配;
{
int i;
char c;
SqStack.top=-1;//栈顶元素的初始化;
for(i=0;str[i]!=0;i++)
{
switch(str[i])
{
case '(':
case '{':
case '[':SqStack.top++;SqStack.a[SqStack.top]=str[i];break;//左括号则进栈;
case ')':
case ']':
case'}':c=SqStack.a[SqStack.top];
if(match(c,str[i]))//看括号是否匹配
SqStack.top--;
else
return 0;
}
}
if(SqStack.top==-1)//是否全部匹配括号;
return -1;
else
return 0;
}
int main()
{
int i;
char str[51];//定义字符串;
while(gets(str))
{
i=matching(str);
if(i!=0)//括号是否匹配;
printf("yes\n");
else
printf("no\n");
}
return 0;
}