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

// ConsoleApplication5.cpp : 定义控制台应用程序的入口点。

//

  1. #include "stdafx.h"
  2. #include<vector>
  3. #include<iostream>
  4. #include<string>
  5. #include <stack>
  6. using namespace std;
  7. class ChkExpression {
  8. public:
  9. bool chkLegal(string A) {
  10. stack<char> inStack;
  11. stack<char> outStack;
  12. for (int i = 0; i < A.size(); i++)
  13. {
  14. inStack.push(A[i]);
  15. }
  16. while (!inStack.empty())
  17. {
  18. char ch = inStack.top();
  19. bool flag = true;
  20. cout << inStack.top() << " ";
  21. if (!outStack.empty() )
  22. {
  23. cout << outStack.top() << endl;
  24. }
  25. else
  26. {
  27. cout << "空" << endl;
  28. }
  29. switch (ch)
  30. {
  31. case '}':
  32. outStack.push('}');
  33. inStack.pop();
  34. break;
  35. case ']':
  36. outStack.push(']');
  37. inStack.pop();
  38. break;
  39. case ')':
  40. outStack.push(')');
  41. inStack.pop();
  42. break;
  43. case '{':
  44. if (!outStack.empty() )
  45. {
  46. outStack.pop();
  47. inStack.pop();
  48. }
  49. else
  50. {
  51. flag = false;
  52. }
  53. break;
  54. case '[':
  55. if (!outStack.empty() )
  56. {
  57. outStack.pop();
  58. inStack.pop();
  59. }
  60. else
  61. {
  62. flag = false;
  63. }
  64. break;
  65. break;
  66. case '(':
  67. if (!outStack.empty() )
  68. {
  69. outStack.pop();
  70. inStack.pop();
  71. }
  72. else
  73. {
  74. flag = false;
  75. }
  76. break;
  77. /* case '{':
  78. if (!outStack.empty() && outStack.top() == '}')
  79. {
  80. outStack.pop();
  81. inStack.pop();
  82. }
  83. else
  84. {
  85. flag = false;
  86. }
  87. break;
  88. case '[':
  89. if (!outStack.empty() && outStack.top() == ']')
  90. {
  91. outStack.pop();
  92. inStack.pop();
  93. }
  94. else
  95. {
  96. flag = false;
  97. }
  98. break;
  99. case '(':
  100. if (!outStack.empty() && outStack.top() == ')')
  101. {
  102. outStack.pop();
  103. inStack.pop();
  104. }
  105. else
  106. {
  107. flag = false;
  108. }
  109. break;*/
  110. default:
  111. inStack.pop();
  112. break;
  113. }
  114. if (flag == false)
  115. {
  116. break;
  117. }
  118. }
  119. if (outStack.empty() && inStack.empty())
  120. {
  121. return true;
  122. }
  123. else
  124. {
  125. return false;
  126. }
  127. }
  128. };
  129. int main()
  130. {
  131. string A = "[a+b*(5-4)]*{x+b+b*(1+2)}";
  132. ChkExpression ce;
  133. cout << ce.chkLegal(A) << endl;
  134. return 0;
  135. }

写一段代码,判断一个包括'{','[','(',')',']','}'的表达式是否合法(注意看样例的合法规则。) 给定一个表达式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. android实现多条件筛选列表菜单筛选菜单

    封装组合控件实现一个简单的多条件筛选菜单,可根据自己需求定制筛选条件,动态添加筛选项,灵活使用. 控件封装,点击切换,使用popupWindow实现下拉列表,项目中封装了多种数组数据排序处理方法的工具 ...

  2. 调用Thread.interrupt()方法到底会发生什么?

    1. 当线程处于Blocked状态(sleep,wait,join),线程会退出阻塞状态,并抛出一个InterruptedException.park除外,它有响应但是不会抛出异常 2. 当线程处于R ...

  3. Network | 协议栈

    因特网协议栈Internet protocol stack: 应用层Application layer.运输层Transport layer.网络层Network layer.链路层Data link ...

  4. POJ 1067 取石子游戏 [博弈]

    题意:威佐夫博弈. 思路:看了很多证明都没看懂.最后决定就记住结论好了. 对于所有的奇异局面(必败局),有通项公式 Pi = (a, b), (a = i * [(sqrt(5) + 1) / 2], ...

  5. SpringMVC_01:创建运行环境(Maven)

    Maven 环境下配置: 1.新建MavenProject,打包选线根据情况选择jar war和pom jar:打包为jar包,主要用于被其他项目引用 war:打包为war包,可直接运行于服务器 po ...

  6. Delphi中@,^,#,$分别表示什么?

    @:取址运算符; var int:integer; p:^integer; new(P); int:=24; p:=@int; dispose(P); ^:指针的引用解析操作符; var pint:^ ...

  7. ios修改hosts文件后访问网址114导航域名无法解析问题

    当前的问题是打开hosts文件转换成utf8格式浏览发现前面有@之类的非法字符,手动修改后可以访问.

  8. php报错配置问题

    在开发的时候php.ini ,要显示所有的错误 error_reporting=E_ALL | E_STRICT 在发布的时候可以显示除了notice之外的错误,打开错误记录功能 error_repo ...

  9. DEDECMS后台模板修改

    一.后台登录页 dede/templets/login.htm去掉底部的代码(类名为login-power.dede-iframe这两个div都要去掉)其中“login.php?dopost=show ...

  10. ubuntu下apache添加https支持

    http是无状态,不安全的连接.而https是通过ssl加密的http连接,可靠性更强. 确保openssl安装完成,用openssl来产生和签署证书,可以自己签署,但是不安全,建议用证书机构颁发的证 ...