回 帖 发 新 帖 刷新版面

主题:[讨论]请各位帮我看道题目!!

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.

有点错误,请各位帮帮忙!!

回复列表 (共12个回复)

11 楼


我是小学生耶,不要老是出怎么深的题

12 楼


program ex01(input,output);
type arraytype=array[0..255] of char;
var s,[size=6][color=800000]z[/color][/size]: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([size=6][color=800000]z[/color][/size],s[i])
        else
            begin
                 pop([size=6][color=800000]z[/color][/size]);
                 if pei(x,s[i])=false then begin
                        writeln('Wrong');
                        halt;
                        close(input);
                        close(output)
                 end;
            end;
     end;
     if empty([size=6][color=800000]z[/color][/size])=true then writeln('Ok') else writeln('Wrong');
     close(input);close(output);
end.
[size=6][color=800000]这样应该好了[/color][/size]

我来回复

您尚未登录,请登录后再回复。点此登录或注册