基本思路:可用棧來解決;遍歷字符串,如果遇到左括號,則將左括號入棧,如果遇到右括號,則判斷棧頂的元素是否為左括號,如果為左括號則彈出棧頂元素,然后繼續字符串遍歷,遍歷結束后,如果棧為空,則認為括號是成對出現。
下面貼上實現代碼:
1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 5 int _tmain(int argc, _TCHAR* argv[]) 6 { 7 string sss = "((1+(2+3))+6))"; 8 stack<char> st; 9 bool bFlag = true; 10 for (auto ch : sss) 11 { 12 if (ch == '(') 13 { 14 st.push(ch); 15 } 16 else 17 { 18 if (ch == ')') 19 { 20 if (st.empty()) 21 { 22 bFlag = false; 23 break; 24 } 25 else 26 { 27 st.pop(); 28 } 29 } 30 } 31 } 32 if (st.empty() && bFlag) 33 { 34 cout << "pipei" << endl; 35 } 36 else 37 { 38 cout << "bu pipei" << endl; 39 } 40 41 system("PAUSE"); 42 return 0; 43 }