#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. Selenium Chrome

    Chrome版本不变 发现在 Selenium-server-standalone-2.39.0.jar 中可全屏 Selenium-server-standalone-3.8.1.jar 中不可全屏 ...

  2. JS-NaN的数据类型

    NaN 的数据类型:not a number .是数字类型但是不是数字 例: var x = Number('abcd'); //结果是NaN alert( typeof (x) ); //结果是nu ...

  3. Commander

    原文:https://www.npmjs.com/package/commander Commander.js Installation npm install commander --save Op ...

  4. Activiti之流程通过、驳回、会签、转办、中止、挂起等核心操作封装(Activiti5.9)

    http://blog.csdn.net/rosten/article/details/38300267 package com.famousPro.process.service.impl; imp ...

  5. 移动端跨平台方案对比:React Native、weex、Flutter

    跨平台一直是老生常谈的话题,cordova.ionic.react-native.weex.kotlin-native.flutter等跨平台框架百花齐放,颇有一股推倒原生开发者的势头. 为什么我们需 ...

  6. 第八届蓝桥杯 4、方格分割 DFS

    标题:方格分割 6x6的方格,沿着格子的边线剪开成两部分. 要求这两部分的形状完全相同. 如图:p1.png, p2.png, p3.png 就是可行的分割法. 试计算: 包括这3种分法在内,一共有多 ...

  7. Git常用命令及使用,GitLab/GitHub初探,Git/Svn区别

    Git安装配置及常用命令 0 Git本地分支管理 1 Git远程分支管理 2 Git Tag标签管理 3 Git Log日志 4 其它高级命令 5 常规使用及介绍 6 角色权限 7 分支定义 8 一般 ...

  8. 回文的范围——算法面试刷题2(for google),考察前缀和

    如果一个正整数的十进制表示(没有前导零)是一个回文字符串(一个前后读取相同的字符串),那么它就是回文.例如,数字5, 77, 363, 4884, 11111, 12121和349943都是回文. 如 ...

  9. python - 列表,元组

    1.列表       定义:能装对象的对象     在python中使用[] 来描述列表,内部元素用逗号隔开,对数据类型没有要求.     列表存在索引和切片,和字符串的操作是一样的   2.列表相关 ...

  10. Java 面向对象 知识点基础浅谈

    1.类和对象的关系 类是一个抽象的模板,对象是根据模板制造出来的,只有类建立之后,对象才可以在类中实例化对象.举个例子讲:我要用黄金浇筑一块砖,我会在一个模型里进行,这样才能有砖的形状,那模型即是类, ...