主题:[讨论]请各位帮我看道题目!!
1. 括弧匹配检验work1.???(pas,c,cpp)
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。
现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?
输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,不匹配就输出“Wrong”。
输入一个字符串:
[([][])]
输出:
OK
【输入】
输入仅一行字符(字符个数小于255)
【输出】
匹配就输出 “OK” ,不匹配就输出“Wrong”。
【样例】
输入(work1.in)
[(])
输出(work1.out)
Wrong
我用栈做的,程序是:
type arraytype=array[0..255] of char;
var s:arraytype;
i,j,top:integer;
ch,x:char;
procedure push(var stack:arraytype;n:char);
begin
top:=top+1;
stack[top]:=n;
end;
procedure pop(var stack:arraytype);
begin
x:=stack[top];
top:=top-1;
end;
function empty(var stack:arraytype):boolean;
begin
if top=0 then empty:=true else empty:=false;
end;
function pei(a,b:char):boolean;
begin
if a='(' then
if b=')' then pei:=true else pei:=false
else
if b=']' then pei:=true else pei:=false;
end;
begin
assign(input,'work1.in');
assign(output,'work1.out');
reset(input);rewrite(output);
j:=0;top:=0;
while not(eof()) do
begin
j:=j+1;
read(s[j]);
end;
for i:=1 to j do
begin
if (s[i]='(') or (s[i]='[') then
push(s,s[i])
else
begin
pop(s);
if pei(x,s[i])=false then begin
writeln('Wrong');
halt;
close(input);
close(output)
end;
end;
end;
if empty(s)=true then writeln('Ok') else writeln('Wrong');
close(input);close(output);
end.
有点错误,请各位帮帮忙!!
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。
现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?
输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,不匹配就输出“Wrong”。
输入一个字符串:
[([][])]
输出:
OK
【输入】
输入仅一行字符(字符个数小于255)
【输出】
匹配就输出 “OK” ,不匹配就输出“Wrong”。
【样例】
输入(work1.in)
[(])
输出(work1.out)
Wrong
我用栈做的,程序是:
type arraytype=array[0..255] of char;
var s:arraytype;
i,j,top:integer;
ch,x:char;
procedure push(var stack:arraytype;n:char);
begin
top:=top+1;
stack[top]:=n;
end;
procedure pop(var stack:arraytype);
begin
x:=stack[top];
top:=top-1;
end;
function empty(var stack:arraytype):boolean;
begin
if top=0 then empty:=true else empty:=false;
end;
function pei(a,b:char):boolean;
begin
if a='(' then
if b=')' then pei:=true else pei:=false
else
if b=']' then pei:=true else pei:=false;
end;
begin
assign(input,'work1.in');
assign(output,'work1.out');
reset(input);rewrite(output);
j:=0;top:=0;
while not(eof()) do
begin
j:=j+1;
read(s[j]);
end;
for i:=1 to j do
begin
if (s[i]='(') or (s[i]='[') then
push(s,s[i])
else
begin
pop(s);
if pei(x,s[i])=false then begin
writeln('Wrong');
halt;
close(input);
close(output)
end;
end;
end;
if empty(s)=true then writeln('Ok') else writeln('Wrong');
close(input);close(output);
end.
有点错误,请各位帮帮忙!!