標籤:c c++ stl棧
題目描述
電腦系的同學從大一就開始學習程式設計語言了。初學者總是容易寫出括弧不匹配的程式。至今你仍然清楚地記得,那天上機的時候你的程式編譯出錯,雖然你使盡了吃奶的力氣也沒有把錯誤逮著。你實在沒有辦法只得舉手向老師請教。結果老師走過來一看,板著臉,指著螢幕,很不高興地衝著你說:“括弧!括弧!括弧沒有匹配!”自那以後,你痛定思痛決定寫一個程式,協助剖析器的括弧是否出錯,以免再出洋相。為了簡化工作,你假定程式的注釋、字元常量、字串常量中都不包含括弧,同時你只檢查()[]{}這三種括弧。
輸入
輸入為多組資料,最後一組資料以@結束,其餘每組資料以#結束。@與#不會出現在正常程式中。每個程式含有不超過255個括弧字元,程式長度不確定。
輸出
每組資料輸出一行,如果括弧匹配無誤則輸出"Wonderful",括弧匹配出現問題則輸出"Be Careful"(請注意大小寫和拼字錯誤,這些問題都將導致Wrong Answer)。 你只要關心括弧是否匹配,不需要在意其餘的語法錯誤。
範例輸入
int main(){ return 0;}#int main(){@
範例輸出
WonderfulBe Careful#include<iostream> #include <stack> using namespace std; char a[3000000]; int main() { stack<char> k; int i; while(cin.getline(a,3000000)) { for(i=0;a[i]!='\0'&&a[0]!='#'&&a[0]!='@';i++) { if (!k.empty()&&((k.top()-a[i]==-2)||(k.top()-a[i]==-1))) { k.pop(); } else if(a[i]==40||a[i]==41||a[i]==91||a[i]==93||a[i]==123||a[i]==125) { k.push(a[i]); } } if(a[0]=='@') { if(k.empty()) { cout << "Wonderful" << endl; } else { cout << "Be Careful" << endl; } break; } if (a[0]=='#') { if(k.empty()) { cout << "Wonderful" << endl; } else { cout << "Be Careful" << endl; } while (!k.empty()) { k.pop(); } } } return 0; }
勤奮的電腦系學生