标签:
<span style="font-size:18px;">#include<stdio.h> #include<string.h> #include<stack> #include<algorithm> using namespace std; //**判断算术符的优先级**// char precede(char a,char b) { if(a=='+'||a=='-') { if(b=='+'||b=='-'||b==')'||b=='=') return '>'; else return '<'; } if(a=='*'||a=='/') { if(b=='(') return '<'; else return '>'; } if(a==')') { return '>'; } if(a=='('||a=='=') { if(a=='('&&b==')'||a=='='&&b=='=') return '='; else return '<'; } } //**算术符的运算**// double operate(double num1,char ch,double num2) { double sum; if(ch=='+') { sum=num1+num2; } if(ch=='-') { sum=num1-num2; } if(ch=='*') { sum=num1*num2; } if(ch=='/') { sum=num1/num2; } return sum; } int main() { int ncases,i,k,len,flag; double x,y; char c,str[1001],a[1001]; //**建立两个栈,optr储存运算符,opnd存储double字符串(数字字符)**// stack<char>optr; stack<double>opnd; optr.push('=');//**将起始'='作为栈底元素**// scanf("%d",&ncases); while(ncases--) { memset(str,0,sizeof(str)); memset(a,0,sizeof(a)); flag=0;k=0; scanf("%s",str); len=strlen(str); for(i=0;i<=len-1;) { if(str[i]=='='&&optr.top()=='=')//**如果栈顶跟读取的‘=’相同,表示表达式求值完毕**// { break; } if((str[i]>='0'&&str[i]<='9')||str[i]=='.')//**读取浮点数读取,悲剧啊**// { flag=1;//**flag标记是否读取完这一串数字(浮点数)**// a[k++]=str[i]; i++; continue; } if(flag==1) { a[k]='\0'; opnd.push(atof(a));//**atof表示将字符串转化为浮点数(double型),atoi是转化为整型(int型) flag=0; k=0; } switch(precede(optr.top(),str[i])) { case '<'://**栈顶元素优先权低**// optr.push(str[i]); i++; break; case '='://**脱括号**// optr.pop(); i++; break; case '>': //**退栈并讲运算结果入栈**// c=optr.top(); optr.pop(); x=opnd.top(); opnd.pop(); y=opnd.top(); opnd.pop(); opnd.push(operate(y,c,x)); break; } } printf("%.2lf\n",opnd.top()); opnd.pop(); } return 0; } </span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/qjt19950610/article/details/47150257