PTA 7-2 符号配对(20 分)
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
#include<cstdio>
#include<iostream>
#include<cmath>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<cstring>
#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;
} Stack;
Status InitStack(Stack &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(Stack &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(Stack &S)
{
if(S.top==S.base)
return ERROR;
S.top--;
return OK;
}
Status GetTop(Stack &S,SElemType &e)
{
if(S.base==S.top)
return ERROR;
e=*(S.top-1);
return OK;
}
const int maxn=1000+5;
char s[maxn];
bool Find(Stack &S,char ch)
{
char tmp[maxn];
memset(tmp,'\n',sizeof(tmp));
int num=0;
while(S.top!=S.base)
{
SElemType e2;
GetTop(S,e2);
if(e2==ch)
{
Pop(S);
for(int i=num-1; i>=0; i--)
Push(S,tmp[i]);
return true;
}
else
{
tmp[num++]=e2;
}
Pop(S);
}
for(int i=num-1; i>=0; 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");
}
int main()
{
Stack Sta;
InitStack(Sta);
int flag=1;
while(gets(s))
{
if(s[0]=='.') break;
int len=strlen(s);
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{')
Push(Sta,s[i]);
else if(s[i]=='/'&&s[i+1]=='*'&&i+1<len)
{
++i;
Push(Sta,'<');
} else if(s[i]==')')
{ if(Sta.top!=Sta.base)
{
SElemType e;
GetTop(Sta,e);
if(e=='(')
Pop(Sta);
else if(flag)
{
printf("NO\n");
flag=0;
judge(e);
}
}
else if(flag)
{
flag=0;
printf("NO\n");
printf("?-)\n");
} }
else if(s[i]==']')
{ if(Sta.top!=Sta.base)
{
SElemType e;
GetTop(Sta,e);
if(e=='[')
Pop(Sta);
else if(flag)
{
printf("NO\n");
flag=0;
judge(e);
}
}
else if(flag)
{
flag=0;
printf("NO\n");
printf("?-]\n");
} }
else if(s[i]=='}')
{ if(Sta.top!=Sta.base)
{
SElemType e;
GetTop(Sta,e);
if(e=='{')
Pop(Sta);
else if(flag)
{
printf("NO\n");
flag=0;
judge(e);
}
}
else if(flag)
{
flag=0;
printf("NO\n");
printf("?-}\n");
} }
else if(s[i]=='*'&&s[i+1]=='/'&&i+1<len)
{
++i;
if(Sta.top!=Sta.base)
{
SElemType e;
GetTop(Sta,e);
if(e=='<')
Pop(Sta);
else if(flag)
{
printf("NO\n");
flag=0;
judge(e);
}
}
else if(flag)
{
flag=0;
printf("NO\n");
printf("?-*/\n");
} }
}
}
if(flag)
{
if(Sta.base==Sta.top)
printf("YES\n");
else
{
SElemType e;
GetTop(Sta,e);
printf("NO\n");
judge(e);
}
}
}
PTA 7-2 符号配对(20 分)的更多相关文章
- PTA 堆栈操作合法性(20 分)
7-1 堆栈操作合法性(20 分) 假设以S和X分别表示入栈和出栈操作.如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合 ...
- PTA 说反话-加强版(20 分)(字符串处理)
说反话-加强版(20 分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串.字符串由若干单词和若干空 ...
- PTA | 1014 福尔摩斯的约会 (20分)
大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm.大侦探很快就明白了,字条上奇 ...
- PTA | 1009说反话(20分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有 ...
- PTA 7-4 堆栈操作合法性 (20 分)
假设以S和X分别表示入栈和出栈操作.如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列.请编写程序,输入S ...
- PTA 10-排序4 统计工龄 (20分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/721 5-13 统计工龄 (20分) 给定公司NN名员工的工龄,要求按工龄增序输出每 ...
- PTA 02-线性结构2 一元多项式的乘法与加法运算 (20分)
原题地址 https://pta.patest.cn/pta/test/15/exam/4/question/710 5-2 一元多项式的乘法与加法运算 (20分) 设计函数分别求两个一元多项式的 ...
- PTA 01-复杂度1 最大子列和问题 (20分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/709 5-1 最大子列和问题 (20分) 给定KK个整数组成的序列{ N_1N1 ...
- PTA 最小堆插入元素和删除堆顶(无哨兵元素) (20分)
PTA 最小堆插入元素和删除堆顶(无哨兵元素) (20分) 对于给定的最小堆(优先队列),分别实现插入元素和删除堆顶的函数. 函数接口定义: int insertIntoHeap(struct Hea ...
随机推荐
- 使用Groovy+Spock构建可配置的订单搜索接口测试用例集
概述 测试是软件成功上线的安全网.基本的测试包含单元测试.接口测试.在 "使用Groovy+Spock轻松写出更简洁的单测" 一文中已经讨论了使用GroovySpock编写简洁的单 ...
- mybatis源码解析2---SqlSessionFactoryBuilder、SqlSessionFactory解析
1.先看一个mybatis最简单的Demo String resource = "mybatis-config.xml"; //1.流形式读取mybatis配置文件 InputSt ...
- 创建一个简单的WCF程序
1.创建WCF服务库 打开VS2010,选择文件→新建→项目菜单项,在打开的新建项目对话框中,依次选择Visual C#→WCF→WCF服务库,然后输入项目名称(Name),存放位置(Location ...
- Matlab基础部分2-数组和矩阵分析
矩阵块操作: 矩阵尺寸改变: 矩阵的查找: 矩阵的排序: 矩阵求和: 矩阵的求积: 矩阵的差分: 全零矩阵: 单位矩阵: 随机矩阵: 伴随矩阵: 方针行列式计算: 特征值: 对角矩阵: 三角矩阵: 矩 ...
- Linux CPU使用率含义及原理
相关概念 在Linux/Unix下,CPU利用率分为用户态.系统态和空闲态,分别表示CPU处于用户态执的时间,系统内核执行的时间,和空闲系统进程执行的时间. 下面是几个与CPU占用率相关的概念. CP ...
- QXDM操作应用
QXDM(The QUALCOMM Extensible Diagnostic Monitor)是高通公司(Qualcomm)公司发布的可以对手机终端所发数据进行跟踪有效工具,通过对数据的分析可以诊断 ...
- Python+OpenCV图像处理(十)—— 图像二值化
简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 一.普通图像二值化 代码如下: import cv2 as cv import numpy ...
- Jquery 插件 图片验证码
摘自:https://www.cnblogs.com/lusufei/p/7746465.html !(function(window, document) { var size = 5;//设置验证 ...
- 将GPS获得的UTC时间转换成本地时间的方法(转)
源: 将GPS获得的UTC时间转换成本地时间的方法 参考: gps时转换为utc时间方法
- sqlalchemy 小试
# -*- coding: utf-8 -*- from sqlalchemy import Column, String, create_engine,ForeignKey,Text,INTEGER ...