PTA-栈(括弧匹配)
#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-栈(括弧匹配)的更多相关文章
- 括弧匹配检验(check)
/*题目:括弧匹配检验 检验给定表达式中括弧是否正确匹配 (两种括弧“( ) ”“[]" ,正确输出OK,错误则输出wrong. 2016年8月8日07:24:58 作者:冰樱梦 */ # ...
- leetcode 栈 括号匹配
https://oj.leetcode.com/problems/valid-parentheses/ 遇到左括号入栈,遇到右括号出栈找匹配,为空或不匹配为空, public class Soluti ...
- 第六周PTA笔记 括号匹配调整+堆放石子+最大积分+168
括号匹配调整 如果通过插入" +"和" 1"可以从中得到格式正确的数学表达式,则将带括号的序列称为正确的. 例如,序列 "(())()",& ...
- 括弧匹配检验(check.cpp)
[问题描述] 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错 ...
- 1354:括弧匹配检验ybt
[题目描述]假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配. 现在 ...
- CF 990C. Bracket Sequences Concatenation Problem【栈/括号匹配】
[链接]:CF [题意]: 给出n个字符串,保证只包含'('和')',求从中取2个字符串链接后形成正确的括号序列的方案数(每个串都可以重复使用)(像'()()'和'(())'这样的都是合法的,像')( ...
- ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)
本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...
- 栈应用之中缀表达式计算 MFC实现(计算器核心)
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 支持小数.阶乘.乘方.加减乘除.括号优先级运算,美化输出结果(显示结果末尾没有多余的0) void ...
- 带问号的括号匹配问题918C 1153C
cf里好像经常出 这些题,一般贪心是搞不了的.. 918C 问有多少子段[l,r]满足合法括号 先从左往右扫,如果问号+‘(' 数量 >= ')' 说明这段区间的 ) 是满足条件的 然后再从右往 ...
随机推荐
- React-native完整配置流程
开头敲黑板!! 无论你是RN的新手还是老手,跟着流程走,RN项目搭建起来完全不是问题! 一.网址收集 expo配置网址:https://blog.expo.io/building-a-react- ...
- pycharm安装配置
激活 教程https://blog.csdn.net/u014044812/article/details/78727496 推荐修改host文件的方法 配置 https://blog.csdn.ne ...
- java笔记 -- 数组
概念: 数组是一种数据结构, 用来存储同一类型值的集合. 通过一个整型的下标可以访问数组中的每一个值. 声明: int[] a(推荐,将类型int[](整形数组)和变量名分开了) 或者int a[] ...
- (简单)华为P9plus VIE-AL00的usb调试模式在哪里开启的经验
每次我们使用pc接通安卓手机的时候,如果手机没有开启Usb调试模式,pc则没能成功检测到我们的手机,有时,我们使用的一些功能比较强的的app比如之前我们使用的一个app引号精灵,老版本就需要打开Usb ...
- restful接口定义的几种方式
GET (SELECT): Retrieve a specific Resource from the Server, or a listing of Resources. #从服务器检 ...
- Flex4之皮肤定制
Flex4之皮肤定制[Skin类和Skin类] 博客分类: RIA-Flex4专栏 FlexAdobeUPFlashUI 第一.关于spark.skin.SparkSkin类的 1. ...
- Android(五)——dex文件动态调试
代码动态调试: 代码动态调试技术,一般是通过观察程序在运行过程中的状态,如寄存器内容,函数执行结果,内存使用情况等等,分析函数功能,明确代码逻辑,查找可能存在的漏洞 工具:IDA 条件:Android ...
- AOP之配置文件实现
看了http://www.cnblogs.com/xrq730/p/4919025.html这篇文章之后自己跟着做了一遍,有需要可以去看原文,比我写的更详细. AOP AOP(Aspect Orien ...
- 2015-112 ado.net2
CRUD:create read update delete 七. 数据绑定数据列的转换 在gridview中添加<OnRowDataBound="GridView1_RowDataB ...
- docker 安装redis , 让宿主机可以访问
1, docker 拉去最新版本的redis docker pull redis #后面可以带上tag号, 默认拉取最新版本 2, docker安装redis container 安装之前去定义我们的 ...