括号配对问题(C)
描述
現(xiàn)在,有一行括號(hào)序列,請(qǐng)你檢查這行括號(hào)是否配對(duì)。
輸入
第一行輸入一個(gè)數(shù)N(0<N<=100),表示有N組測(cè)試數(shù)據(jù)。后面的N行輸入多組輸入數(shù)據(jù),每組輸入數(shù)據(jù)都是一個(gè)字符串S(S的長(zhǎng)度小于10000,且S不是空串),測(cè)試數(shù)據(jù)組數(shù)少于5組。數(shù)據(jù)保證S中只含有"[", “]”, “(”, “)” 四種字符
輸出
每組輸入數(shù)據(jù)的輸出占一行,如果該字符串中所含的括號(hào)是配對(duì)的,則輸出Yes,如果不配對(duì)則輸出No
樣例輸入
3
[(])
(])
([])
樣例輸出
No
No
Yes
思路分析:
①,
定義一個(gè)char類型的數(shù)字s【65535】負(fù)責(zé)存儲(chǔ)數(shù)據(jù);還有一個(gè)char類型的字符ch,負(fù)責(zé)一個(gè)一個(gè)接收數(shù)據(jù);int類型的n,負(fù)責(zé)控制次數(shù); int類型的top負(fù)責(zé)查看s數(shù)組的下表。
②,
每輸入一個(gè)ch,進(jìn)行判斷,若是‘(’或是‘【’,則top指向的s數(shù)組進(jìn)行top++,將ch存入s里面;
若ch為‘)’并且s下標(biāo)top>0(說(shuō)明s里面已經(jīng)有元素了),并且s【top-1】==‘(’,則top–;
同理,若ch為‘】’并且s下標(biāo)top>0(說(shuō)明s里面已經(jīng)有元素了),并且s【top-1】==‘【’,則top–;
③,
最后判斷top的值是否為0,若是0,則s里面沒(méi)有剩余元素,即全部匹配;反之則沒(méi)有完全匹配。
####代碼如下:
#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; }總結(jié)
- 上一篇: set和multiset集合容器
- 下一篇: 《秋日示休上人诗》第十一句是什么