括號匹配(棧和隊列)

Description
假設一個算術表達式中能夠包含三種括號:圓括號「(」和「)」,方括號「[」和「]」和花括號「{」和「 」,且這三種括號可按任意的次序嵌套使用
(如:…[…{… …[…]…]…[…]…(…)…)。編寫判別給定表達式中所含括號是否正確配對出現的算法。輸出結果YES 或者 NO。ios

Input
5+{[2X5]+2}算法

Output
YESspa

Sample Input
8-[{2+7]}
Sample Output
NOcode

///這個程序存在問題,按照題意三種括號成對存在,成對出現,後臺可能也是這樣安排的,但對比第一個例題,如果右括號多餘左括號那麼就不行了
#include<iostream> #include<stack> #include<stdio.h> #include<string.h>
using namespace std; int main() { int len,i,j; char x[601]; gets(x); len=strlen(x); stack<char>s; s.push('#'); for(i=0; i<len; i++) { if((x[i]=='(')||(x[i]=='[')||(x[i]=='{')) s.push(x[i]);///壓入棧
        else if((x[i]==')'&&s.top()=='(')||(x[i]==']'&&s.top()=='[')||(x[i]=='}'&&s.top()=='{')) { s.pop();///出棧
 } } if(s.top()=='#') printf("YES\n"); else printf("NO\n"); return 0; }
相關文章
相關標籤/搜索