括號配對問題(C)
阿新 • • 發佈:2018-12-20
描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入 第一行輸入一個數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; }