栈练习括弧匹配检验
Description
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。
现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?
输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,不匹配就输出“Wrong”。
Input
输入仅一行字符(字符个数小于255)
Output
匹配就输出 “OK” ,不匹配就输出“Wrong”。
分析:遇到左括号就入栈,遇到右括号如果匹配就将栈顶左括号出栈,不匹配就是Wrong。
代码
var
a:array[0..1000] of char;
ch:char;
l:longint;
begin
while not eoln do
begin
read(ch);
if (ch='[') or (ch='(') then
begin
inc(l);
a[l]:=ch;
end
else
begin
if ch=']' then if a[l]<>'['
then begin
writeln('Wrong');
halt;
end
else dec(l);
if ch=')' then if a[l]<>'('
then begin
writeln('Wrong');
halt;
end
else dec(l);
end;
end;
if (ch='(') or (ch=']') or (l>0) then
begin
writeln('Wrong');
halt;
end;
writeln('OK');
end.