括号匹配检查
typedef struct{ int value;//char value; int line; }bracket; bracket brk[MAXN];freopen("example.c", "r", stdin); while((c=getchar())!=EOF){ if(c is \n)//换行符 { 行数++; continue; } if(c is ')//单引号 { while(getchar()!='\'');//一直读到第二个单引号 continue; } if(c is ")//双引号 { while(getchar()!='\"');//一直读取到第二个双引号 continue; } if(c is /){ c = getchar();//判断下一个是不是/或* if(c is *){ for(a = getchar(),b = getchar();!(a=='*'&&b=='/');a=b,b=getchar()){ if(a=='\n') 行数++; }; } if(c is /){ 一直读取到行尾,行数++; } } 最后需要判断是否为括号{()},如果是括号,就存入数组中。 brk[len].value = c; brk[len++].line = 行数; }for(i = 0;i < len ; i++){ if(栈空){ push(brk[i]); }else{ //判断brk[i]和栈顶元素是否匹配: if( 匹配,栈顶元素左括号和brk[i]右括号对应 ){ pop(); }else if(stk.data[stk.top].value == '(' && brk[i].value == '{'){ //输出 ( 不匹配 return 0; }else if(brk[i].amount == ')' || brk[i].amount == '}'){ //输出右括号不匹配; return 0; }else{ push(brk[i]);//入栈 } } }//如果栈空,输出brk数组元素,否则输出栈顶元素。 if(isEmpty()){ for(i = 0;i<lenbrk;i++){ printf("%c",brk[i].amount); } }else{ //输出栈顶不匹配。 }
Last updated