写一段代码,判断一个包括'{','[','(',')',']','}'的表达式是否合法(注意看样例的合法规则。) 给定一个表达式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()方法,如果阻塞,通过循环来测试等待条件.
随机推荐
- Bzoj1974 [Sdoi2010]auction 代码拍卖会
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 375 Solved: 151 Description 随着iPig在P++语言上的造诣日益提升,他形成 ...
- [Codeforces Round #351 Div. 2] 673A Bear and Game
A. Bear and Game time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- 【SPOJ61】Brackets(线段树)
题意:给出一个括号序列,要求维护两种操作: 1.将第x位上的括号取反 2.查询当前整个括号序列是否匹配 n<=3e4 思路:线段树维护区间内没有匹配的左右括号数量 pushup时t[p].r=t ...
- error C2275 将此类型用作表达式非法
http://blog.csdn.net/lqk1985/article/details/7389159 C2275: “size_t”: 将此类型用作表达式非法,同时还导致一堆变量未定义的bug. ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---25
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- JavaScript-性能优化,函数节流(throttle)与函数去抖(debounce)
我在写一个类似百度搜索框的自动提示功能时候,使用了AJAX+keydown事件.调试时候我发现,当在搜索框中输入文字的时候,控制台在不停发送AJAX.这在本地服务器测试还好,如果我把它拿到运行环境,很 ...
- js中eval()和$.parseJSON()的区别
之前自己一直对ajax不是特别的熟悉,所以一般都很少用这个去写功能,但是最近这个项目中用到了,用ajax异步传数据,json传数据这个时候就需要去解析传过来的数据了,eval()和$.parseJSO ...
- 定时执行rsync同步数据以及mysql备份
需求:把机器A中的附件.图片等,备份到备份机B中.将数据库进行备份 附件备份 在A中,启动rsync服务,编辑/etc/xinetd.d/rsync文件,将其中的disable=yes改为disabl ...
- centos7最新 mysq5.6 安装
安装教程 1.下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 可能遇见的问题: ...
- Artix : Arch拥抱OpenRC 使用笔记
轻量桌面Archlinux用户逃离systemd,拥抱Gentoo的openrc. 镜像源:官方镜像源非常慢,曾经一度体验artix后就放弃了,后来发现了清华和腾讯云的镜像,速度非常快,现在又重新安装 ...