- 最後登錄
- 2022-10-28
- 在線時間
- 361 小時
- 註冊時間
- 2010-2-3
- 閱讀權限
- 30
- 精華
- 0
- UID
- 7563378
- 帖子
- 722
- 積分
- 2721 點
- 潛水值
- 16557 米
| 關鍵的 stack 行為與合法判斷流程如下- #define MAX_SIZE 50
- class CMyStack{
- private:
- int m_iTop;
- char m_Element[MAX_SIZE];
- public:
- CMyStack(){ m_iTop = 0; }
- bool isEmpty(){ return m_iTop == 0; }
- bool isFull(){ return m_iTop >= MAX_SIZE; }
- void push( char e ){ m_Element[m_iTop++] = e; }
- char pop(){ return m_iTop == 0 ? 0 : m_Element[--m_iTop]; }
- void clear(){ m_iTop = 0; }
- };
- int main(){
- char* input[4] = { "{[()]}", "((([]))", "({[()][]})", "[]{[()]{}" };
- CMyStack stack;
- for( int i=0; i<4; ++i ){
- stack.clear();
- bool isCorrect = true;
- for( char* pSymbol=input[i]; *pSymbol&&isCorrect; ++pSymbol ){
- switch( *pSymbol ){
- case '{': case '[': case '(':
- stack.push( *pSymbol );
- break;
- case '}':
- if( stack.isEmpty() || stack.pop() != '{' )
- isCorrect = false;
- break;
- case ']':
- if( stack.isEmpty() || stack.pop() != '[' )
- isCorrect = false;
- break;
- case ')':
- if( stack.isEmpty() || stack.pop() != '(' )
- isCorrect = false;
- break;
- default:
- isCorrect = false;
- }
- }
- cout << input[i] << ( isCorrect && stack.isEmpty() ? ": CORRECT" : ": ERROR" ) << endl;
- }
- system( "pause" );
- return 0;
- }
複製代碼 ... |
|