表达式括号匹配配对判断问题

 1 #include <iostream>
 2 #include <string>
 3 #include <cstdio>
 4 #include <stack>
 5 using namespace std;
 6
 7 int main()
 8 {
 9     int n;
10     string ch;
11     cout << "输入表达式数目: ";
12     cin >> n;
13     while (n--) {
14         stack<char> check;
15         int flag = 0;
16         cout << "输入表达式: ";
17         cin >> ch;
18         int len = ch.size();
19         int i = 0;
20         for (i = 0; i < len; i++) {
21             //"("、")"、"["、"]"、"{"、"}"、"<"、">"
22             if (ch[i] == ‘(‘ || ch[i] == ‘[‘ || ch[i] == ‘{‘ || ch[i] == ‘<‘) {
23                 check.push(ch[i]); flag = 0; //左括号直接进栈
24             }
25             else if (ch[i] == ‘)‘ || ch[i] == ‘]‘ || ch[i] == ‘}‘ || ch[i] == ‘>‘) {
26                 if (check.empty()) {          //遇到右括号时,栈顶为空则为不匹配
27                     flag = 1; break;
28                 }
29                 else {
30                     if ((check.top() == ‘(‘ && ch[i] == ‘)‘) || (check.top() == ‘[‘ && ch[i] == ‘]‘) ||
31                         (check.top() == ‘{‘ && ch[i] == ‘}‘) || (check.top() == ‘<‘ && ch[i] == ‘>‘)) {
32                         flag = 0; check.pop();     //出栈左括号,继续判断
33                     }
34                     else {                         //如果左右不匹配,则退出判断
35                         flag = 1; break;
36                     }
37                 }
38             }
39         }
40         if (check.empty() && !flag) { //如果栈为空,且没有右括号出现--匹配
41             printf("匹配\n");
42         }
43         else if (!check.empty() && !flag){
44             cout << "不匹配: 多左括号" << check.top() << endl;
45         }
46         else if (flag && check.empty()) {
47             cout << "不匹配: 多右括号" << ch[i] << endl;
48         }
49         else if (flag && !check.empty()) {
50             switch(ch[i]) {
51                 case ‘)‘ : cout << "不匹配: " << check.top()
52                                 << "与" << ch[i] << "匹配错\n"; break;
53                 case ‘]‘ : cout << "不匹配: " << check.top()
54                                 << "与" << ch[i] << "匹配错\n"; break;
55                 case ‘}‘ : cout << "不匹配: " << check.top()
56                                 << "与" << ch[i] << "匹配错\n"; break;
57                 case ‘>‘ : cout << "不匹配: " << check.top()
58                                 << "与" << ch[i] << "匹配错\n"; break;
59                 default : cout << "不匹配\n"; break;
60             }
61         }
62         cout << endl;
63     }
64     return 0;
65 }
时间: 2024-10-27 07:44:42

表达式括号匹配配对判断问题的相关文章

表达式括号匹配(栈)

1386: 表达式括号匹配 时间限制: 1 Sec  内存限制: 128 MB提交: 12  解决: 9[提交][状态][讨论版] 题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回"YES":否则返回"NO".表达式长度小于255,左圆括号少于20个. 输入 包括一行数据,即表达式 输出 包括一行,即"Y

P1739 表达式括号匹配

题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”:否则返回“NO”.表达式长度小于255,左圆括号少于20个. 输入输出格式 输入格式: 一行:表达式 输出格式: 一行:“YES” 或“NO” 输入输出样例 输入样例#1: ① 2*(x+y)/(1-x)@ ② (25+x)*(a*(a+b+b)@ 输出样例#1: ① YES ② NO 说明 表达式长度小

洛谷 P1739 表达式括号匹配【STL/stack/模拟】

题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回"YES":否则返回"NO".表达式长度小于255,左圆括号少于20个. 输入输出格式 输入格式: 一行:表达式 输出格式: 一行:"YES" 或"NO" 输入输出样例 输入样例#1: 2*(x+y)/(1-x)@ 输出样例#1

表达式括号匹配

题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回"YES":否则返回"NO".表达式长度小于255,左圆括号少于20个. AC代码 #include <bits/stdc++.h> using namespace std; int top=0; inline int read() { int w=0,x

1353表达式括号匹配(stack)

[题目描述] 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回"YES":否则返回"NO".表达式长度小于255,左圆括号少于20个. [输入] 一行数据,即表达式. [输出] 一行,即"YES" 或"NO". [输入样例] 2*(x+y)/(1-x)@[输出样例] YES[提示] [

【题解】Luogu1739 表达式括号匹配

提示: 这是一篇良心博客. 在这里,你会看到所有你可能踩到的坑. 所以,作者用这个方式来掩饰自己超蒻-- 踩坑路程 一眼看过去,水题一个!随手写了这么一个代码: #include <bits/stdc++.h> int main(){ char c; int flag = 0; while(c = getchar()&& c != '@'){ if(c == '(')flag++; else if(c == ')') flag --; } std::cout <<

8586 括号匹配检验

今天把数据结构学习的代码拿出来和网友分享一下,应该测试能过! Time Limit:1000MS  Memory Limit:1000K Total Submit:679 Accepted:182 Type: Program   Language: Not Limited Description 利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式.

(编程训练)再回首,数据结构——(升级版)使用栈判断括号匹配

点击打开 基础版 最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. 在VC++6.0下可运行,当初还写了不少注释. /* ********************************************************** * 3-2 * 设在一个算术表达式中允许使用3种括号:圆括号"(".")",方 * 括号"["."]",花括号"

栈的应用-判断括号匹配

栈的一个典型应用就是可以用来协助分析表达式的括号是否匹配.括号可以延伸到任何成对出现的界定符,例如引号,书名号等. 接下来给出程序实现: 第一部分给出的是堆栈的插入,删除等操作对应的实现: 1 public class StackChar 2 { 3 private int maxSize;//堆栈数组大小 4 private char [] stackArray; 5 private int top;//堆栈顶 6 public StackChar(int maxSize) 7 { 8 thi