基本思路:可用栈来解决;遍历字符串,如果遇到左括号,则将左括号入栈,如果遇到右括号,则判断栈顶的元素是否为左括号,如果为左括号则弹出栈顶元素,然后继续字符串遍历,遍历结束后,如果栈为空,则认为括号是成对出现。
下面贴上实现代码:
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 }