这道题比较奇怪,它的匹配规则并不是我们平时想想的那种匹配规则,例如:平时的匹配规则是()、{}、[]才能匹配,本题中(和} 、]、)都能匹配。所以做题时要好好审题。另外,本题中给的测试用例是错误的。

// 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值,代表它是否合法。的更多相关文章

  1. javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

    javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...

  2. 假设写一段代码引导PC开机这段代码是 ? Here is a tiny &quot;OS&quot; :-D

    Hello world -- OS 我找到了华科绍志远博士的相关代码,发现他依据MIT的JOS的boot.S 稍作改动.然后单独剥离出来,能够非常好玩~ 资料下载地址: http://download ...

  3. 用for循环写这段代码

    之前用while循环写了一段代码,现在改为用for循环来写,代码如下: hongtao_age = 38 for i in range(5): guess_age = int(input(" ...

  4. JavaScript-navigator_userAgent-编写一段代码能够区分浏览器的主流和区分

    1 userAgent:包含浏览器名称和版本号的字符串 <!DOCTYPE html> <html> <head lang="en"> < ...

  5. 代码安全丨第六期:XPath注入漏洞样例

    1.什么是XPath注入漏洞? XPath是一种用来在内存中导航整个XML树的语言,它使用路径表达式来选取XML文档中的节点或者节点集. XPath注入是指程序使用外部输入动态构造用于从XML数据库检 ...

  6. PHP写一段代码,确保多个进程同时写入一个文件成功

    这个需求是在软件设计过程常见的加锁.学计算机的同学都应该知道,这个是在<计算机操作系统>课程上有这个知识点.主要要考虑的是进程的同步,也就是进程对资源的互斥访问.OK,用程序说话吧! &l ...

  7. 写一段代码在遍历 ArrayList 时移除一个元素?

    该问题的关键在于面试者使用的是 ArrayList 的 remove() 还是 Iterator 的 remove()方法.这有一段示例代码,是使用正确的方式来实现在遍历的过程中移 除元素,而不会出现 ...

  8. 用 wait-notify 写一段代码来解决生产者-消费者问题

    在同步块中调用 wait() 和 notify()方法,如果阻塞,通过循环来测试等待条件.请参考答案中的示例代码. [生产者] import java.util.Vector; import java ...

  9. 用 wait-notify 写一段代码来解决生产者-消费者问题?(答案)

    请参考答案中的示例代码.只要记住在同步块中调用 wait() 和 notify()方法,如果阻塞,通过循环来测试等待条件.

随机推荐

  1. 【HDOJ5512】Pagodas(数论)

    题意:给定n,a,b,一开始集合里面有两个数:a和b,然后两个人轮流往这个集合里面增加数字 增加数字的原则是:这个集合里面任选两个数的和或差(a + b或a - b或b -a的中的任意一个没被选中的属 ...

  2. .NET中如何有效的使用Cache

    原文发布时间为:2009-09-30 -- 来源于本人的百度文章 [由搬家工具导入]   Cache 即高速缓存 ,我想很多人对他的第一印象一定像我一样,感觉他一定能提高系统得性能和运行速度。   C ...

  3. 鼠标放在预览图a.gif上,旁边有放大图出现

    原文发布时间为:2009-04-23 -- 来源于本人的百度文章 [由搬家工具导入] <html><script type="text/javascript"&g ...

  4. linux多线程学习笔记五--线程安全【转】

    转自:http://blog.csdn.net/kkxgx/article/details/7506085 版权声明:本文为博主原创文章,未经博主允许不得转载. 一,线程安全基础 一个函数被称为线程安 ...

  5. LeetCode OJ-- Length of Last Word

    https://oj.leetcode.com/problems/length-of-last-word/ 对一个字符串遍历,求最后一个单词的长度,如果有 ‘ ’,则切开了. 字符串的最后一个字符为 ...

  6. 在Linux 双机下自己手动实现浮动ip技术

    两台Linux服务器,一台为主机(IP:124.158.26.30)对外提供了一定的网络服务,另一台从机(IP:124.158.26.31)能提供相同的服务,但ip地址没有对外部公开客户端连接的都是1 ...

  7. Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色

    Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色 在图12.10~12.12中我们会看到在各个平台下活动指示器的颜色是不一样的.Android的活动指示器默认是深粉色的: ...

  8. Unique Binary Search Trees II - LeetCode

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

  9. springboot集合pagehelper分页不生效的原因

    也可以

  10. SecureCRT鼠标快速复制粘贴