intallBrackets_test(char* str){InitStack(S);for(p = str;*p; p++){if(*p =='('||*p =='['||*p =='{')push(S,*p);elseif(*p ==')'||*p ==']'||*p =='}'){if(StackEmpty(S))return FALSE;pop(S, c);if(*p ==')'&& c !='(')return FALSE;if(*p ==']'&& c !='[')return FALSE;if(*p =='}'&& c !='{')return FALSE;}}if(!StackEmpty(S))return FALSE;return TRUE;}
表达式求值
//输入的表达式要以'#'结尾,如‘5+6*3/(3-1)#’//opter为运算符栈//opval为操作数栈intgetIndex(char theta)//获取theta所对应的索引{int index =0;switch(theta){case'+':
index =0;break;case'-':
index =1;break;case'*':
index =2;break;case'/':
index =3;break;case'(':
index =4;break;case')':
index =5;break;case'#':
index =6;default:break;}return index;}chargetPriority(char theta1,char theta2)//获取theta1与theta2之间的优先级{constchar priority[][7]=//算符间的优先级关系{{'>','>','<','<','<','>','>'},{'>','>','<','<','<','>','>'},{'>','>','>','>','<','>','>'},{'>','>','>','>','<','>','>'},{'<','<','<','<','<','=','0'},{'>','>','>','>','0','>','>'},{'<','<','<','<','<','0','='},};int index1 =getIndex(theta1);int index2 =getIndex(theta2);return priority[index1][index2];}doublecalculate(double b,char theta,double a)//计算b theta a{switch(theta){case'+':return b + a;case'-':return b - a;case'*':return b * a;case'/':return b / a;default:break;}}doublegetAnswer()//表达式求值{
opter.push('#');//首先将'#'入栈opterint counter =0;//添加变量counter表示有多少个数字相继入栈,实现多位数的四则运算char c =getchar();while(c !='#'|| opter.top()!='#')//终止条件{if(isdigit(c))//如果c在'0'~'9'之间{if(counter ==1)//counter==1表示上一字符也是数字,所以要合并,比如12*12,要算12,而不是单独的1和2{double t = opval.top();
opval.pop();
opval.push(t *10+(c -'0'));
counter =1;}else{
opval.push(c -'0');//将c对应的数值入栈opval
counter++;}
c =getchar();}else{
counter =0;//counter置零switch(getPriority(opter.top(), c))//获取运算符栈opter栈顶元素与c之间的优先级,用'>','<','='表示{case'<'://<则将c入栈opter
opter.push(c);
c =getchar();break;case'='://=将opter栈顶元素弹出,用于括号的处理
opter.pop();
c =getchar();break;case'>'://>则计算char theta = opter.top();
opter.pop();double a = opval.top();
opval.pop();double b = opval.top();
opval.pop();
opval.push(calculate(b, theta, a));}}}return opval.top();//返回opval栈顶元素的值}