给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入格式:
输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。
输出格式:
如果括号配对,输出yes,否则输出no。
输入样例1:
sin(10+20)
输出样例1:
yes
输入样例2:
{[}]
输出样例2:
no
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define maxsize 101
struct node
{
int top;
char data[maxsize];
};
struct node *creat()
{
struct node *s=NULL;
s=(struct node *)malloc(sizeof(struct node));
s->top=-1;
return s;
}
void push(struct node *s,char ch1)
{
s->top++;
s->data[s->top]=ch1;
}
int main()
{
int i,flag=1;
char ch[101],ch1[1000];
gets(ch);
ch1['(']=')';
ch1['{']='}';
ch1['[']=']';
struct node *s=NULL;
s=creat();
for(i=0;ch[i]!='\0';i++)
{
if(ch[i]=='{'||ch[i]=='['||ch[i]=='(')
{
push(s,ch[i]);
}
else if(ch[i]==')'||ch[i]=='}'||ch[i]==']')
{
if(s->top!=-1&&ch1[s->data[s->top]]==ch[i])
{
s->top--;
}
else
{
flag=0;
break;
}
}
}
//如果不写s->top!=-1;
//如果只输入左括号,没有符号与之匹配,flag=1,仍然成立;
if(flag==1&&s->top==-1) printf("yes\n");
else printf("no\n");
return 0;
}