首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

用数组实现括号配对检查,输出不正确,请大家指点解决办法

2012-03-06 
用数组实现括号配对检查,输出不正确,请大家指点今天编了一个关于括号配对检查的小程序,可是输出老有错误。

用数组实现括号配对检查,输出不正确,请大家指点
今天编了一个关于括号配对检查的小程序,可是输出老有错误。上网看到好多人都是用堆栈实现的,我是用数组来实现的。  
希望哪位大哥给看看。  
 
 
  #include <stdio.h>  
  #include <string.h>  
  #include <conio.h>  
  #define         N       100  
 
  void   check(char   input[N])  
  {  
        char   a[N],b[N],c[N],d[N],e[N],f[N],g[N];  
        int   j=0,k=0,m=0,n=0,s=0,t=0,x=0;  
        int   i;  
 
  /*       for(i=0;input;i++)         */  
  /*       {                                 */  
                switch(input[i++])  
                {  
                        case '{ ':         a[j++]=i;  
                                                break;  
                        case '} ':         b[k++]=i;  
                                                break;  
                        case '[ ':         c[m++]=i;  
                                                break;  
                        case '] ':         d[n++]=i;  
                                                break;  
                        case '( ':         e[s++]=i;  
                                                break;  
                        case ') ':         f[t++]=i;  
                                                break;  
                        default:         g[x++]=i;  
                                                break;  
                  }  
/*           }         */  
 
          a[j]= '\0 ';  


          b[k]= '\0 ';  
          c[m]= '\0 ';  
          d[n]= '\0 ';  
          e[s]= '\0 ';  
          f[t]= '\0 ';  
          g[x]= '\0 ';  
 
 
          if(j==k)   /*   {}配对检查   */  
        ;  
                else  
                        if(j> k)  
                                printf( "%d   '} '   WAS   LACKED   IN   YOUR   EXPRESSION! ",j-k);  
                        else  
                                if(k> j)  
                                        printf( "%d   '{ '   was   LACKED   IN   YOUR   EXPRESSION! ",k-j);  
 
          if(m==n)     /*   []配对检查   */  
                ;  
                else  
                        if(m> n)  
                                printf( "%d   '] '   WAS   LACKED   IN   YOUR   EXPRESSION! ",m-n);  
                        else  
                                if(n> m)  
                                        printf( "%d     '[ '   WAS   LACKED   IN   YOUR   EXPRESSION! ",n-m);  
          if(s==t)     /*   ()配对检查   */  
                ;  
                else  
                if(s> t)  
                printf( "%d   ') '   WAS   LACKED   IN   YOUR   EXPRESSION! ",s-t);  
                        else  
                if(t> s)  
                        printf( "%d   '( '   WAS   LACKED   IN   YOUR   EXPRESSION! ",t-s);  
 
 
 
 
          if(a[0],b[0]||c[0] <d[0]||e[0] <f[0])     /*   }{,][,)(     类型的错误检查   */  


                {  
                        if(a[0]> b[0])  
                                printf( "THE   PLACE   OF   THE   '} '   WERE   WRONG! ");  
                        if(c[0]> d[0])  
                                printf( "THE   PLACE   OF   THE   '] '   WERE   WRONG! ");  
                        if(e[0]> f[0])  
                                printf( "THE   PLACE   OF   THE   ') '   WERE   WRONG! ");  
                  }  
 
 
 
/*             m=j=0;   */  
/*             while(a[j++]&&c[m++])   */  
/*                   if(strcmp(a[j],c[m]) <0)   */  
/*                           printf( " ")   */  
 
  }  
 
 
main()  
{  
        char   input[N];  
        char   s;  
        clrscr();  
        do{  
 
                printf( "PLEASE   INPUT   THE   EXPRESSION:     ");  
                scanf( "%c ",input);  
                check(input);  
                printf( "DO   YOU   WANT   TO   CONTINUE?     (Y/N)   ");  
                s=getch();  
                printf( "%c ",s);  
                }while(s== 'y '||s== 'Y ');  
 
                return   0;  
}  
         
 


[解决办法]
否则每次只是check校验了一个字符,
对一个字符进行校验,
自然不会得到正确结果 ......

%s 输入一个串后进行校验。
[解决办法]
/*******************编程对含括号表达式进行配对检查***************************/
/****************** by: fohonet******************************************/
#include "stdio.h "
main()
{int i=1;
char a;
static char c[255];
printf( "请输入表达式:\n ");
while ((a=getchar())!= '\n ')
{switch(a)
{case '{ ': c[i++]= '} ';break;
case '[ ': c[i++]= '] ';break;


case '( ': c[i++]= ') ';break;
case '} ':
case '] ':
case ') ':
if (c[--i]!=a) {printf( "对不起!符号不匹配!\n "); return;}
}
}
if (i==1)
printf( "表达式正确!\n ");
else printf( "对不起!符号不匹配!\n ");
getch();
}
/*****************************************************************/
[解决办法]
回复人:gallanthunter(冷如冰) ( 一级(初级)) 信誉:100 2007-4-20 22:17:11 得分:0
?

TO: akanewf()
input[] 是我定义的一个数组,input本来就表示的是地址,因此我认为scanf( "%c ",input);是正确的,而scanf( "%c ", &input);应该写为scanf( "%c ", &input[i]);才对。
==================================================
他不是说input,说的是%c, 应该是%s。输入结束后的回车键没有被输入到数组中,所以
s=getch();
printf( "%c ",s);
中的s是回车键,程序其实就执行一次就退出了。
另外,程序的实现过于繁琐,其实可以用很简单的办法就实现的,用不着那么多个数组

热点排行