codeup问题 B: Problem E

布满荆棘的人生 2023-02-20 14:00 21阅读 0赞

题目描述
请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[“, “]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。

输入
有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。

输出
对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。
样例输入

  1. 4
  2. [(d+f)*{}]
  3. [(2+3))
  4. ()}
  5. [4(6]7)9

样例输出

  1. yes
  2. no
  3. no
  4. no

代码

  1. #include <cstdio>
  2. #include <stack>
  3. #include <string>
  4. #include <string.h>
  5. using namespace std;
  6. int main()
  7. {
  8. int n;
  9. scanf("%d",&n);
  10. char str[1000];
  11. stack<char> ops;
  12. for(int i=0;i<n;i++)
  13. {
  14. scanf("%s",str);
  15. int len=strlen(str);
  16. while(!ops.empty())ops.pop();
  17. int j;
  18. for(j=0;j<len;j++)
  19. {
  20. if(str[j]=='{'||str[j]=='['||str[j]=='(')
  21. ops.push(str[j]);
  22. else if(str[j]=='}')
  23. {
  24. if(ops.empty()||ops.top()!='{')
  25. {
  26. printf("no\n");
  27. break;
  28. }
  29. else
  30. ops.pop();
  31. }
  32. else if(str[j]==']')
  33. {
  34. if(ops.empty()||ops.top()!='['){
  35. printf("no\n");
  36. break;
  37. }
  38. else
  39. ops.pop();
  40. }
  41. else if(str[j]==')')
  42. {
  43. if(ops.empty()||ops.top()!='(')
  44. {
  45. printf("no\n");
  46. break;
  47. }
  48. else
  49. ops.pop();
  50. }
  51. }
  52. if(ops.empty()&&j==len)
  53. printf("yes\n");
  54. else if(j==len&&!ops.empty())
  55. printf("no\n");
  56. }
  57. return 0;
  58. }

发表评论

表情:
评论列表 (有 0 条评论,21人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Codeup墓地—问题 B: 找x

    题目描述 输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。 输入 测试数据有多组,输入n

    相关 Codeup墓地—问题 B: A+B

    题目描述 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。 现在请计算A+B的结果,并以正常形式输出。 输入 输入包含多组数据数据,每