WLACM 1079: 括弧匹配檢驗 棧入門

                                                1079: 括弧匹配檢驗

                                                                   時間限制: 1 Sec  內存限制: 128 MB
                                                                   [提交][狀態][討論版][命題人: 外部導入] 

 

題目描述

 

       假設表達式中允許包含兩種括號:圓括號和方括號,其嵌套的順序隨意,如([]())或[([][])]等爲正確的匹配,[(])或([]()或(()))均爲錯誤的匹配。

現在的問題是,要求檢驗一個給定表達式中的括弧是否正確匹配?

輸入一個只包含圓括號和方括號的字符串,判斷字符串中的括號是否匹配,匹配就輸出 “OK”,不匹配就輸出“Wrong”。

輸入一個字符串:[([][])],輸出:OK

輸入

 

       輸入僅一行字符(字符個數小於255)

輸出

 

匹配就輸出 “OK” ,不匹配就輸出“Wrong”。

樣例輸入

[(])

樣例輸出

Wrong

來源

棧和隊列 

 

     此題常規循環一看就很難做,但是括號匹配容易讓人想到棧,考慮用棧來寫。

 

#include <iostream>
#include<cstring>
#include<stack>
using namespace std;
//<>,(),[],{}
char fan(char a){
	if(a=='<')
		return '>';
	else if (a=='(')
		return ')';
	else if(a=='[')
		return ']';
	else if(a=='{')
		return '}';
	else if(a=='>')
		return '<';
	else if (a==')')
		return '(';
	else if(a==']')
		return '[';
	else if(a=='}')
		return '{';
	 
}
int main(int argc, char *argv[])
{
	char s[256];
	int n,j,i;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		stack <char> a;
		scanf("%s",s);
		int l=strlen(s);
		for(j=0;j<l;j++){
			if(a.empty()){
				if(s[j]=='<'||s[j]=='('||s[j]=='['||s[j]=='{')
					a.push(s[j]);
				else{
					printf("NO\n");
					break;
				}
			}
			else{
				if(s[j]=='<'||s[j]=='('||s[j]=='['||s[j]=='{'){
					if(s[j]=='{'&&(a.top()=='{'))
						a.push(s[j]);
					else if(s[j]=='['&&(a.top()=='['||a.top()=='{'))
						a.push(s[j]);
					else if(s[j]=='('&&(a.top()=='('||a.top()=='['||a.top()=='{'))
						a.push(s[j]);
					else if(s[j]=='<'&&(a.top()=='<'||a.top()=='('||a.top()=='['||a.top()=='{'))
						a.push(s[j]);
				}
				else{
					if(a.top()!=fan(s[j])){
						printf("NO\n");
						break;
					}
					else
						a.pop();
					
				}
			}
				
			
			
			
		}
		if(j==l&&a.empty())
			printf("YES\n");
		else if(j==l)
			printf("NO\n");
	}	
	return 0;
}

  此題爲棧入門題,對於常規的棧增加了括號數量與括號順序。

 這題還沒想到很快的方法。。。這麼長的代碼寫的頭都痛了。。。。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章