1. 程式人生 > >括號配對問題(C)

括號配對問題(C)

描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組。資料保證S中只含有"[", “]”, “(”, “)” 四種字元 輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No 樣例輸入 3 [(]) (]) ([]) 樣例輸出 No No Yes

思路分析: ①, 定義一個char型別的數字s【65535】負責儲存資料;還有一個char型別的字元ch,負責一個一個接收資料;int型別的n,負責控制次數; int型別的top負責檢視s陣列的下表。 ②, 每輸入一個ch,進行判斷,若是‘(’或是‘【’,則top指向的s陣列進行top++,將ch存入s裡面; 若ch為‘)’並且s下標top>0(說明s裡面已經有元素了),並且s【top-1】==‘(’,則top–;

同理,若ch為‘】’並且s下標top>0(說明s裡面已經有元素了),並且s【top-1】==‘【’,則top–; ③, 最後判斷top的值是否為0,若是0,則s裡面沒有剩餘元素,即全部匹配;反之則沒有完全匹配。

####程式碼如下:

#include<stdio.h>
#include<string.h>

int main()
{
    char s[65535];
	int n;
	scanf("%d",&n);
	getchar();
	while(n--){
		int top=0;
		char a;
		while((a=getchar())!='\n'){
			if(a==')' && top>0 && s[top-1]=='(')
				top--;
			else if(a==']' && top>0 && s[top-1]=='[')
				top--;
			else	s[top++]=a;
		}
		if(top==0)	printf("Yes\n");
		else	printf("No\n");
	}
	return 0;
}