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

Posted 豆子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表达式括号匹配配对判断问题相关的知识,希望对你有一定的参考价值。

 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 }

 

以上是关于表达式括号匹配配对判断问题的主要内容,如果未能解决你的问题,请参考以下文章

设计一个判别表达式中左、右括号是不是配对出现的算法,采用啥数据结构最佳。

[PTA][C语言][数据结构]判断表达式中括号是否匹配

栈练习之Example001-判断一个算术表达式中的括号是否正确配对

在Java中,设计一个算法,判断一个算术表达式中的括号是不是配对。

括号匹配_进阶篇 ( 7-2 符号配对 )

写一个正则,java的,需要匹配多个括号,如判断 11(22(234)(as(fds) 是不是括号都是不是配对正确了