写一段代码,判断一个包括'{','[','(',')',']','}'的表达式是否合法(注意看样例的合法规则。) 给定一个表达式A,请返回一个bool值,代表它是否合法。
这道题比较奇怪,它的匹配规则并不是我们平时想想的那种匹配规则,例如:平时的匹配规则是()、{}、[]才能匹配,本题中(和} 、]、)都能匹配。所以做题时要好好审题。另外,本题中给的测试用例是错误的。
// ConsoleApplication5.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<vector>
#include<iostream>
#include<string>
#include <stack>
using namespace std;
class ChkExpression {
public:
bool chkLegal(string A) {
stack<char> inStack;
stack<char> outStack;
for (int i = 0; i < A.size(); i++)
{
inStack.push(A[i]);
}
while (!inStack.empty())
{
char ch = inStack.top();
bool flag = true;
cout << inStack.top() << " ";
if (!outStack.empty() )
{
cout << outStack.top() << endl;
}
else
{
cout << "空" << endl;
}
switch (ch)
{
case '}':
outStack.push('}');
inStack.pop();
break;
case ']':
outStack.push(']');
inStack.pop();
break;
case ')':
outStack.push(')');
inStack.pop();
break;
case '{':
if (!outStack.empty() )
{
outStack.pop();
inStack.pop();
}
else
{
flag = false;
}
break;
case '[':
if (!outStack.empty() )
{
outStack.pop();
inStack.pop();
}
else
{
flag = false;
}
break;
break;
case '(':
if (!outStack.empty() )
{
outStack.pop();
inStack.pop();
}
else
{
flag = false;
}
break;
/* case '{':
if (!outStack.empty() && outStack.top() == '}')
{
outStack.pop();
inStack.pop();
}
else
{
flag = false;
}
break;
case '[':
if (!outStack.empty() && outStack.top() == ']')
{
outStack.pop();
inStack.pop();
}
else
{
flag = false;
}
break;
case '(':
if (!outStack.empty() && outStack.top() == ')')
{
outStack.pop();
inStack.pop();
}
else
{
flag = false;
}
break;*/
default:
inStack.pop();
break;
}
if (flag == false)
{
break;
}
}
if (outStack.empty() && inStack.empty())
{
return true;
}
else
{
return false;
}
}
};
int main()
{
string A = "[a+b*(5-4)]*{x+b+b*(1+2)}";
ChkExpression ce;
cout << ce.chkLegal(A) << endl;
return 0;
}
写一段代码,判断一个包括'{','[','(',')',']','}'的表达式是否合法(注意看样例的合法规则。) 给定一个表达式A,请返回一个bool值,代表它是否合法。的更多相关文章
- javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数
javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...
- 假设写一段代码引导PC开机这段代码是 ? Here is a tiny "OS" :-D
Hello world -- OS 我找到了华科绍志远博士的相关代码,发现他依据MIT的JOS的boot.S 稍作改动.然后单独剥离出来,能够非常好玩~ 资料下载地址: http://download ...
- 用for循环写这段代码
之前用while循环写了一段代码,现在改为用for循环来写,代码如下: hongtao_age = 38 for i in range(5): guess_age = int(input(" ...
- JavaScript-navigator_userAgent-编写一段代码能够区分浏览器的主流和区分
1 userAgent:包含浏览器名称和版本号的字符串 <!DOCTYPE html> <html> <head lang="en"> < ...
- 代码安全丨第六期:XPath注入漏洞样例
1.什么是XPath注入漏洞? XPath是一种用来在内存中导航整个XML树的语言,它使用路径表达式来选取XML文档中的节点或者节点集. XPath注入是指程序使用外部输入动态构造用于从XML数据库检 ...
- PHP写一段代码,确保多个进程同时写入一个文件成功
这个需求是在软件设计过程常见的加锁.学计算机的同学都应该知道,这个是在<计算机操作系统>课程上有这个知识点.主要要考虑的是进程的同步,也就是进程对资源的互斥访问.OK,用程序说话吧! &l ...
- 写一段代码在遍历 ArrayList 时移除一个元素?
该问题的关键在于面试者使用的是 ArrayList 的 remove() 还是 Iterator 的 remove()方法.这有一段示例代码,是使用正确的方式来实现在遍历的过程中移 除元素,而不会出现 ...
- 用 wait-notify 写一段代码来解决生产者-消费者问题
在同步块中调用 wait() 和 notify()方法,如果阻塞,通过循环来测试等待条件.请参考答案中的示例代码. [生产者] import java.util.Vector; import java ...
- 用 wait-notify 写一段代码来解决生产者-消费者问题?(答案)
请参考答案中的示例代码.只要记住在同步块中调用 wait() 和 notify()方法,如果阻塞,通过循环来测试等待条件.
随机推荐
- android中与Adapter相关的控件----ExpandableListView
ExpandableListView(可折叠的列表) 一.ExpandableListView(可折叠的列表)和ListView有很多地方差不多的,使用也差不多,只是他们使用适配器不一样的,Expan ...
- Linux文件的权限与属性
由于以前学习Linux的时候没有做比较全面的总结笔记,而且平时大部分工作都在windows上进行,所以关于Linux的一些知识点有所遗忘.近期难得空闲,翻阅书籍,学习<鸟哥的Linux私房菜&g ...
- mariadb 集群使用
集群启动问题 在kvm虚机下,启动mariad,日志报如下错误: :: [Note] /usr/libexec/mysqld: Shutdown complete :: mysqld_safe mys ...
- springBoot 程序入口
入口类要放在首个package 这样它能扫到所有的包 @SpringBootApplication @EnableScheduling public class App { public static ...
- Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version
解决方法:
- Android大神 博客
https://github.com/yeungeek/awesome-android-person Android大神 受Trinea的开源项目的启发和参考,也准备列一列Android圈里的大神们. ...
- Thinkphp3.2.3的主从分离事务问题(坑!!!)
情景:使用Thinkphp3.2.3在项目开发中发现开启主从分离后,一旦事务体内,同时存在写入再读出,再写入这样的操作,TP在识别数据库的时候把读操作和写操作识别到了两个库..实际上希望事务开启后,所 ...
- TensorFlow——Checkpoint为模型添加检查点
1.检查点 保存模型并不限于在训练模型后,在训练模型之中也需要保存,因为TensorFlow训练模型时难免会出现中断的情况,我们自然希望能够将训练得到的参数保存下来,否则下次又要重新训练. 这种在训练 ...
- Spring MVC的各种参数绑定方式(请求参数用基础类型和包装类型的区别)(转)
1.基本数据类型(以int为例,其他类似): Controller代码: @RequestMapping("saysth.do") public void test(int cou ...
- Android自定义控件-Path之贝赛尔曲线和手势轨迹、水波纹效果
从这篇开始,我将延续androidGraphics系列文章把图片相关的知识给大家讲完,这一篇先稍微进阶一下,给大家把<android Graphics(二):路径及文字>略去的quadTo ...