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


     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("匹配
    ");
    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] << "匹配错
    "; break;
    53                 case ']' : cout << "不匹配: " << check.top() 
    54                                 << "" << ch[i] << "匹配错
    "; break;
    55                 case '}' : cout << "不匹配: " << check.top() 
    56                                 << "" << ch[i] << "匹配错
    "; break;
    57                 case '>' : cout << "不匹配: " << check.top() 
    58                                 << "" << ch[i] << "匹配错
    "; break;
    59                 default : cout << "不匹配
    "; break;
    60             }
    61         } 
    62         cout << endl; 
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    HDU-2602-Bone Collector
    HDU-1171-Big Event in HDU
    javascript概要
    核桃的数量
    P3372 【模板】线段树 1
    P3373 【模板】线段树 2
    拿糖果
    第二点五个不高兴的小明
    树的直径
    1240. 完全二叉树的权值
  • 原文地址:https://www.cnblogs.com/douzujun/p/5932257.html
Copyright © 2020-2023  润新知