计算器(能识别括号)代码

来源:互联网 发布:olap多维数据库实现 编辑:程序博客网 时间:2024/05/14 10:31
//author:yehongjiang//date;2012/11/29#include"stdafx.h"#include<iostream>#include<string>using namespace std;int main(){//*********读取字符******************const int m=1000;char input[m]={0};int i=0;int t=0;for(i=0;i<i+1;i++){input[i]=getchar();if(input[i]=='='){t=i;break;}}//********转换算式*********************int a=0;int b=0;int c=0;int d=0;int e=0;int f=0;int g=0;int h=0;int total=0;int value[m]={0};char symbol[m]={'0'} ;int change[m]={0};//储存计算数的权for(i=0;i<=t;i++){if((input[i]=='+')||(input[i]=='-')||(input[i]=='*')||(input[i]=='/')||(input[i]=='=')||(input[i]=='(')||(input[i]==')')){ss:symbol[a]=input[i];symbol[a+1]=' ';a++;b=i;c=i;if((input[i+1]=='+')||(input[i+1]=='-')||(input[i+1]=='*')||(input[i+1]=='/')||(input[i+1]=='=')||(input[i+1]=='(')||(input[i+1]==')')){i++;goto ss;}else{for(i=b+1;i<=t;i++){if((input[i]=='+')||(input[i]=='-')||(input[i]=='*')||(input[i]=='/')||(input[i]=='=')||(input[i]=='(')||(input[i]==')')){d=i;break;}}for(f=d-b-2;f>=0;f--)//定义计算数的权{change[d-b-2-f]=pow(double(10),f);}f=0;for(c=c+1;c<d;c++)//转化{     total=total+change[f]*(input[c]-48);//将单个数字加上权求和f++;}value[a]=total;//将转化后的值赋给value数组a++;total=0;i--;}}else{for(i=i+1;i<=t;i++){if((input[i]=='+')||(input[i]=='-')||(input[i]=='*')||(input[i]=='/')||(input[i]=='=')||(input[i]=='(')||(input[i]==')')){e=i;break;}}for(f=e-1;f>=0;f--)//定义计算数的权{change[e-1-f]=pow(double(10),f);}f=0;for(g=0;g<e;g++)//转化{     total=total+change[f]*(input[g]-48);//将单个数字加上权求和f++;}value[a]=total;//将转化后的值赋给value数组a++;total=0;i--;}}//****************计算部分***********************//**********8括号内的运算*****************int q=0;int w=0;int r=0;int y=0;int u=0;int temp=0;int time=0;int time2=0;for(i=0;i<=a;i++){if(symbol[i]==')'){time++;}}for(y=1;y<=time;y++){for(i=0;i<=a;i++){while(symbol[i]==')'){q=i;symbol[i]=' ';for(u=q;u>=0;u--){if(symbol[u]=='('){w=u;symbol[u]=' ';break;}}for(i=w+1;i<q;i++){if((symbol[i]=='+')||(symbol[i]=='-')||(symbol[i]=='*')||(symbol[i]=='/')){time2++;}}//进行*和/的运算for(i=w+1;i<q;i++){while(symbol[i]=='*'){temp=value[i-1]*value[i+1];if(time2>1){time2--;value[i-1]=temp;for(r=i+2;r<=a;r++){value[r-2]=value[r];symbol[r-2]=symbol[r];}q=q-2;i=w+1;}else{value[i-2]=temp;for(r=i+3;r<=a;r++)//运算成功,将value中的值前移4位,symbol中的值前移4位{value[r-4]=value[r];symbol[r-4]=symbol[r];}q=q-4;i=w;}}while(symbol[i]=='/'){temp=value[i-1]/value[i+1];if(time2>1){time2--;value[i-1]=temp;for(r=i+2;r<=a;r++){value[r-2]=value[r];symbol[r-2]=symbol[r];}q=q-2;i=w;}else{value[i-2]=temp;for(r=i+3;r<=a;r++)//运算成功,将value中的值前移5位,symbol中的值前移5位{value[r-4]=value[r];symbol[r-4]=symbol[r];}q=q-4;i=w;}}}//进行+和-的运算for(i=w+1;i<q;i++){while(symbol[i]=='+'){temp=value[i-1]+value[i+1];if(time2>1){time2--;value[i-1]=temp;for(r=i+2;r<=a;r++){value[r-2]=value[r];symbol[r-2]=symbol[r];}q=q-2;i=w+1;}else{value[i-2]=temp;for(r=i+3;r<=a;r++)//运算成功,将value中的值前移4位,symbol中的值前移4位{value[r-4]=value[r];symbol[r-4]=symbol[r];}q=q-4;i=w;}}while(symbol[i]=='-'){temp=value[i-1]-value[i+1];if(time2>1){time2--;value[i-1]=temp;for(r=i+2;r<=a;r++){value[r-2]=value[r];symbol[r-2]=symbol[r];}q=q-2;i=w+1;}else{value[i-2]=temp;for(r=i+3;r<=a;r++)//运算成功,将value中的值前移4位,symbol中的值前移4位{value[r-4]=value[r];symbol[r-4]=symbol[r];}q=q-4;i=w;}}}}time2=0;}}//***************括号外的运算********************//进行*和/的运算int o=0;for(i=1;i<=a;i++){while(symbol[i]=='*'){value[i-1]=value[i-1]*value[i+1];for(o=i+2;o<=a;o++)//运算成功,将value中的值前移两位,symbol中的值前移两位{value[o-2]=value[o];symbol[o-2]=symbol[o];}i=1;}while(symbol[i]=='/'){value[i-1]=value[i-1]/value[i+1];for(o=i+2;o<=a;o++)//运算成功,将value中的值前移两位,symbol中的值前移两位{value[o-2]=value[o];symbol[o-2]=symbol[o];}i=1;}}//进行+和-的运算for(i=1;i<=c;i++){while(symbol[i]=='+'){value[i-1]=value[i-1]+value[i+1];for(o=i+2;o<=a;o++)//运算成功,将value中的值前移两位,symbol中的值前移两位{value[o-2]=value[o];symbol[o-2]=symbol[o];}i=1;}while(symbol[i]=='-'){value[i-1]=value[i-1]-value[i+1];for(o=i+2;o<=a;o++)//运算成功,将value中的值前移两位,symbol中的值前移两位{value[o-2]=value[o];symbol[o-2]=symbol[o];}i=1;}}cout<<value[0]; system("pause");return 0;}


 
原创粉丝点击