#include<iostream> #include<memory.h> #include<stack> #include<string> using namespace std; /* 主要思想是,利用棧,將輸入的字符一個個壓入棧中,遇到右括號,則彈出,直到 遇到左括號,而後將彈出的字符串進行解析,找到所表明的字符串,而後再壓入棧中 最後棧中剩下的就是沒有括號的表達式了,而後再解析一遍表達式,就獲得答案了 */ int main() { stack<char>sta; string re;//輸入的表達式 cin >> re; for (int j = 0; j<re.length(); j++) { if (re[j] == '(' || re[j] == 'x' || re[j] == '|') sta.push(re[j]); if (re[j] == ')') { string out = "";//用來接收括號內的表達式 while (!sta.empty()) { if (sta.top() == '(')//遇到左括號中止 { sta.pop(); break; } else { char temp =sta.top(); out.push_back(temp); sta.pop(); } } //如下開始解析獲得的字符串,用來求整個表達式的值 int max = 0; int count = 0; for (int i = 0; i<out.length(); i++) { if (out[i] == 'x') count++; if (out[i] == '|') { if (count>max) max = count; count = 0; } } if (count>max) max = count; for (int i = 0; i<max; i++) { sta.push('x'); } } } //最後解析整個堆棧內存的字符串 int max = 0; int count = 0; while (!sta.empty()) { if (sta.top() == 'x') { count++; sta.pop(); } else if (sta.top() == '|') { sta.pop(); if (count>max) max = count; count = 0; } } if (count>max) max = count; cout << max; }