7-1 括号匹配 (25 分)

给定一串字符,不超过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;
} 

猜你喜欢

转载自blog.csdn.net/qq_43788669/article/details/89328674