用数组实现括号配对检查,输出不正确,请大家指点
今天编了一个关于括号配对检查的小程序,可是输出老有错误。上网看到好多人都是用堆栈实现的,我是用数组来实现的。
希望哪位大哥给看看。
#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是回车键,程序其实就执行一次就退出了。
另外,程序的实现过于繁琐,其实可以用很简单的办法就实现的,用不着那么多个数组