pascal括号匹配检查的程序,用栈的(最好有解释)

学习 时间:2026-04-06 17:11:29 阅读:9363
pascal括号匹配检查的程序,用栈的(最好有解释)一个只由大括号{},中括号[],小括号()组成的字符串,其嵌套次序只能是:大括号可以嵌套中小括号,中括号可以嵌套小括号.现给出n个这样的字符串(每行一个字符串,字符串中无空格),判断其是否正确匹配,若匹配,该行输出“YES”,否则该行输出“NO”(YES和NO均为大写字符,输出时不要输出引号).如下是正确匹配样例:{[()]()[()]} ()()[()]{[()]} ()[()] {()()[]} 以下不匹配样例:([]) 注:中括号置于小括号中 [()(] 注:括号不成对 Input   第一行,n值(小于10).  接下来n行,每行一个字符串,每个字符串的长度均不超过250个字符.Output   n行,每行为“YES”或“NO”,以判断对应行是否匹配.Sample Input 6 //n为6,表示有6个字符串待检测{[() ]()[() ]} //以下为6个字符串,每行一个( )( ) [()]{[()]}([])[()(] ()[()]{()()[ ] }Sample Output YESYESNONOYESYES

最佳回答

善良的小懒猪

完美的小丸子

2026-04-06 17:11:29

program bracket;const a:array['a'。。'd']of byte=(1,2,3,0);var n,t,i,j:longint; p:boolean; s:string; c:array[0。。255]of char;procedure pop;begin dec(t);end;procedure push(x:char);begin inc(t); c[t]:=x;end;begin readln(n); for i:=1 to n do begin readln(s); c[0]:='d'; t:=0; p:=true; for j:=1 to length(s) do case s[j] of '{':s[j]:='a'; '[':s[j]:='b'; '(':s[j]:='c'; end; while length(s)0 do begin case s[1] of '}':if c[t]='a' then pop else begin p:=false; break; end; ']':if c[t]='b' then pop else begin p:=false; break; end; ')':if c[t]='c' then pop else begin p:=false; break; end; else if a[c[t]]

最新回答共有2条回答

  • 乐观的荔枝
    回复
    2026-04-06 17:11:29

    program bracket;const a:array['a'。。'd']of byte=(1,2,3,0);var n,t,i,j:longint; p:boolean; s:string; c:array[0。。255]of char;procedure pop;begin dec(t);end;procedure push(x:char);begin inc(t); c[t]:=x;end;begin readln(n); for i:=1 to n do begin readln(s); c[0]:='d'; t:=0; p:=true; for j:=1 to length(s) do case s[j] of '{':s[j]:='a'; '[':s[j]:='b'; '(':s[j]:='c'; end; while length(s)0 do begin case s[1] of '}':if c[t]='a' then pop else begin p:=false; break; end; ']':if c[t]='b' then pop else begin p:=false; break; end; ')':if c[t]='c' then pop else begin p:=false; break; end; else if a[c[t]]

上一篇 miss white will be our English teacher this

下一篇 英语翻译Pablo Picasso was born in Spain in 1881.His father was a