#include<bits/stdc++.h>
using namespace std; #define STACK_INIT_SIZE 10000
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
using namespace std;
typedef char SElemType, Status;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base = (SElemType *)malloc(sizeof(SElemType)*STACK_INIT_SIZE);
if (!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack &S, SElemType e)
{
if (S.top - S.base >= S.stacksize)
{
S.base = (SElemType*)malloc(sizeof(SElemType)*(S.stacksize + STACKINCREMENT));
if (!S.base)
exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK; }
Status Pop(SqStack &S)
{
if (S.top == S.base)
return ERROR;
S.top--;
return OK;
}
Status GetTop(SqStack &S, SElemType &e)
{
if (S.base == S.top)
return ERROR;
e = *(S.top - );
return OK;
}
Status Empty(SqStack S)
{
if (S.top == S.base)
return OK;
else
return ERROR;
} const int maxn = + ;
char s[maxn];
bool Find(SqStack &S, char ch)
{
char tmp[maxn]; //初始化为“\n”;
memset(tmp, '\n', sizeof(tmp)); //Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;
int num = ;
while (!Empty)
{
SElemType e2;
GetTop(S, e2);
if (e2 == ch)
{
Pop(S);
for (int i = num - ; i >= ; i--)
Push(S, tmp[i]);
return true;
}
else
{
tmp[num++] = e2;
}
Pop(S);
}
for (int i = num - ; i >= ; i--)
Push(S, tmp[i]);
return false;
}
void judge(char ch)
{
if (ch == '(')
printf("(-?\n");
else if (ch == '[')
printf("[-?\n");
else if (ch == '{')
printf("{-?\n");
else if (ch == '<')
printf("/*-?\n");
} void fun(SqStack &Sta, char ch)
{
int flag = ;;
if (!Empty(S)
{
SElemType e;
GetTop(Sta, e);
if (e == '(')
Pop(Sta);
else if (flag)
{
printf("NO\n");
flag = ;
judge(e);
}
}
} int main()
{
SqStack Sta;
InitStack(Sta);
int flag = ;
while (gets(s))
{
if (s[] == '.') break;
int len = strlen(s);
for (int i = ; i < len; i++)
{
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
Push(Sta, s[i]);
else if (s[i] == '/'&&s[i + ] == '*'&&i + < len)
{
++i;
Push(Sta, '<');
} else if (s[i] == ')')
{ if (!Empty(Sta)
{
SElemType e;
GetTop(Sta, e);
if (e == '(')
Pop(Sta);
else if (flag)
{
printf("NO\n");
flag = ;
judge(e);
}
}
else if (flag)
{
flag = ;
printf("NO\n");
printf("?-)\n");
} }
else if (s[i] == ']')
{ if (!Empty(Sta)
{
SElemType e;
GetTop(Sta, e);
if (e == '[')
Pop(Sta);
else if (flag)
{
printf("NO\n");
flag = ;
judge(e);
}
}
else if (flag)
{
flag = ;
printf("NO\n");
printf("?-]\n");
} }
else if (s[i] == '}')
{ if (!Empty(Sta)
{
SElemType e;
GetTop(Sta, e);
if (e == '{')
Pop(Sta);
else if (flag)
{
printf("NO\n");
flag = ;
judge(e);
}
}
else if (flag)
{
flag = ;
printf("NO\n");
printf("?-}\n");
} }
else if (s[i] == '*'&&s[i + ] == '/'&&i + < len)
{
++i;
if (!Empty(Sta)
{
SElemType e;
GetTop(Sta, e);
if (e == '<')
Pop(Sta);
else if (flag)
{
printf("NO\n");
flag = ;
judge(e);
}
}
else if (flag)
{
flag = ;
printf("NO\n");
printf("?-*/\n");
} }
}
}
if (flag)
{
if (!Empty(Sta)
printf("YES\n");
else
{
SElemType e;
GetTop(Sta, e);
printf("NO\n");
judge(e);
}
}
}
7-2 符号配对 (20 分)

请编写程序检查C语言源程序中下列符号是否配对:/**/()[]{}

输入格式:

输入为一个C语言源程序。当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束。程序中需要检查配对的符号不超过100个。

输出格式:

首先,如果所有符号配对正确,则在第一行中输出YES,否则输出NO。然后在第二行中指出第一个不配对的符号:如果缺少左符号,则输出?-右符号;如果缺少右符号,则输出左符号-?

输入样例1:

void test()
{
int i, A[10];
for (i=0; i<10; i++) /*/
A[i] = i;
}
.

输出样例1:

NO
/*-?

输入样例2:

void test()
{
int i, A[10];
for (i=0; i<10; i++) /**/
A[i] = i;
}]
.

输出样例2:

NO
?-]

输入样例3:

void test()
{
int i
double A[10];
for (i=0; i<10; i++) /**/
A[i] = 0.1*i;
}
.

输出样例3:

YES

PTA-栈(括弧匹配)的更多相关文章

  1. 括弧匹配检验(check)

    /*题目:括弧匹配检验 检验给定表达式中括弧是否正确匹配 (两种括弧“( ) ”“[]" ,正确输出OK,错误则输出wrong. 2016年8月8日07:24:58 作者:冰樱梦 */ # ...

  2. leetcode 栈 括号匹配

    https://oj.leetcode.com/problems/valid-parentheses/ 遇到左括号入栈,遇到右括号出栈找匹配,为空或不匹配为空, public class Soluti ...

  3. 第六周PTA笔记 括号匹配调整+堆放石子+最大积分+168

    括号匹配调整 如果通过插入" +"和" 1"可以从中得到格式正确的数学表达式,则将带括号的序列称为正确的. 例如,序列 "(())()",& ...

  4. 括弧匹配检验(check.cpp)

    [问题描述]        假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错 ...

  5. 1354:括弧匹配检验ybt

    [题目描述]假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配. 现在 ...

  6. CF 990C. Bracket Sequences Concatenation Problem【栈/括号匹配】

    [链接]:CF [题意]: 给出n个字符串,保证只包含'('和')',求从中取2个字符串链接后形成正确的括号序列的方案数(每个串都可以重复使用)(像'()()'和'(())'这样的都是合法的,像')( ...

  7. ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)

    本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...

  8. 栈应用之中缀表达式计算 MFC实现(计算器核心)

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 支持小数.阶乘.乘方.加减乘除.括号优先级运算,美化输出结果(显示结果末尾没有多余的0) void ...

  9. 带问号的括号匹配问题918C 1153C

    cf里好像经常出 这些题,一般贪心是搞不了的.. 918C 问有多少子段[l,r]满足合法括号 先从左往右扫,如果问号+‘(' 数量 >= ')' 说明这段区间的 ) 是满足条件的 然后再从右往 ...

随机推荐

  1. MySQL:(一)

    数据库概述 什么是数据库 数据库是一个文件系统.通过标准SQL语言操作文件系统中数据——用来存放软件系统的数据! SQL:Structured Query Language 结构查询语言 常用数据库简 ...

  2. 雷林鹏分享:url中加号引发的错误

    刚发现了博客的一个bug,标签页中一些标签带有空格,在url输出中使用了 urlencode 函数进行处理,导致空格被转换成了加号(+),这时通过url访问时会出现错误: 临时解决方法是在urlcod ...

  3. 使用http服务提供yum源

    1.安装httpd yum -y install httpd systemctl start httpd systemctl enable httpd 2.镜像资源目录拷贝至http的网站根目录 /v ...

  4. pgRouting新增扩展

    环境依赖:postgresql cgal boost perl 环境变量: boost环境变量 CGAL环境变量 postgresql环境变量 1.新建C++ 空项目 2,添加common引用,更改配 ...

  5. python 【pandas】账号、银行卡号、身份证号导出文件后以科学计数法显示问题解决

    问题描述:excel表中的一些数据会以文本格式格式保存,例如一些较长的编号.银行账号.身份证号等,再python中导出文件后,会发现数据以科学计数法显示,影响后续使用. data2_3.to_exce ...

  6. ZJOI2019Day2AFO记

    题目读下来感觉,,,怎么看上去模型都这么简单全是套路题的样子.先想了下T3应该会50,是个计算几何,50够了..于是先写了40(10分等下再来写)这样就花掉了一个小时.....过去看T1,直接高斯消元 ...

  7. This application failed to start because it could not find or load the Qt platform plugin异常

    双击项目Release文件夹下的exe程序无法启动: 解决办法: 1.将用到的QT组件拷贝到程序目录: 2.将D:\Qt\Qt5.3.2\5.3\msvc2013_64_opengl\plugins目 ...

  8. Django 之 cookie和session

    一. Cookie 1.Cookie的由来 因为HTTP协议是无状态的,无状态的意思就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,也不会受前后请求响应情况直接影响.简 ...

  9. fetch跨域浏览器请求头待研究

    fetch('https://wwww.baidu.com', {headers: { "Access-Control-Allow-Origin": "*", ...

  10. Delphi indy线程控件TIdThreadComponent的使用

    当程序需要做耗时操作,例如访问数据库获取较多的数据.获取大文件MD5.网络访问数据量比较大.界面需要频繁刷新等等,都可以用线程来解决界面卡顿的问题,从而优化用户体验. 在知道TIdThreadComp ...