这道题要求我们判断输出的一个字符串中的括号是否符合运算规律。可以运用栈的思想。如果一个括号是左括号就入栈,如果输出一个右括号就将它和栈头的左括号对比,符合就出栈(相当于消掉)。最后如果还有没消掉的括号就是不符合规定。
话不多说上代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 1000
#define ok 1
#define error 0
typedef struct
{
char a[max];
int top;
}seq;
void InitStack(seq *s)//初始化
{
s->top=-1;
}
int Push(seq*s,char x)//元素入栈
{
if(s->top==max-1) return (error);
s->top++;
s->a[s->top]=x;
return (ok);
}
int Pop(seq *s,char* x)//元素出栈
{
if(s->top==-1) return(error);
else
{
*x=s->a[s->top] ;
s->top--;
return(ok);
}
}
int GetTop(seq*s,char*x)//将栈顶元素读取到x中
{
if(s->top==-1) return (error);
else
{
*x=s->a[s->top];
return (ok);
}
}
int Match(char a,char b)//检测两个括号是否匹配
{
if((a=='('&&b==')')||(a=='['&&b==']')||(a=='{'&&b=='}')) return (ok);
else return 0;
}
int IsEmpty(seq *s)//检测栈是否为空
{
if(s->top==-1) return (ok);
else return(error);
}
void BracketMatch(char *str)
{
seq s;int i;char ch;
InitStack(&s);
for(i=0;str[i]!='\0';i++)
{
switch(str[i])
{
case'(':
case'[':
case'{':
Push(&s,str[i]);break;//如果是前括号,就入栈
case')':
case']':
case'}':
if(IsEmpty(&s)) {printf("no");return;}//空表no右括号多余
else
{
GetTop(&s,&ch);
if(Match(ch,str[i])) Pop(&s,&ch);//匹配的括号消掉
else{printf("no");return;}//括号不同类
}
}
}
if(IsEmpty(&s)) printf("yes");
else printf("no");//左括号多余
}
int main()
{
char str[max];
scanf("%s",str);
BracketMatch(str);
return 0;
}
前几天有人想做一个多租户的平台,每个租户一个库,可以进行水平扩展,应用端根据登...
以下介绍4款开源中文分词系统。 1、ICTCLAS – 全球最受欢迎的汉语分词系统 中文...
zhbbix 一、zabbix 1.1 简介 1.2 zabbix主要功能 1.3 zabbix的主要特点 1.4 zabb...
Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右。但我们...
最近做了个项目,客户对导出excel功能情有独钟,几乎要求每一个列表数据都支持导出...
需要注意的是,调用的封装的数据库,和jQuery的保存地址 一、注册 (1)写文本框...
本文谈谈MySQL的开发必会的sql语句 创建数据库 create database db1; 删除数据库...
在布局文件里面加入按钮等会发送广播 ? xml version 1.0 encoding utf-8 ? Linea...
3月15日消息 外媒 Windows Latest 报道,微软并不是智能手机市场上最大的品牌,...
BP神经网络算法python 底层 TOC 大家好我是朱比特 本节 主要讲解的是BP神经网络...