做一个简单计算器 支持加减乘除括号运算 其中包括大括号中括号和小括号
#include <iostream.h>
#include <stdlib.h>
#include <string>
using namespace std;
double jisuan(char cstr[])
{
string s(cstr);
double dat[100];
int fuhao[100]={0};
int num=0;
char cs[50];
int i,j;
if(s[0]=='-') s.insert(0,1,'0');
for(int n=0;n<s.length();n++)
if((s[n]=='{'||s[n]=='['||s[n]=='(')&&s[n+1]=='-')
s.insert(n+1,1,'0');
if(s[0]=='.') s.insert(0,1,'0');
for(int n=0;n<s.length();n++){
if(!('0'<=s[n-1]&&s[n-1]<='9')&&s[n]=='.')
s.insert(n,1,'0');
if(s[n]=='.'&&!('0'<=s[n+1]&&s[n+1]<='9'))
s.insert(n+1,1,'0');
}
i=1;
for(int m=0,n=0;n<s.length();n++){
switch(s[n]){
case '+': fuhao[i++]=m+1;break;
case '-': fuhao[i++]=m+2;break;
case '*': fuhao[i++]=m+3;break;
case '/': fuhao[i++]=m+4;break;
case '{': m+=4;break;
case '}': m-=4;break;
case '[': m+=80;break;
case ']': m-=80;break;
case '(': m+=1600;break;
case ')': m-
=1600;break;
default : break;
}
num=i;
}
i=0;
j=0;
for(int n=0;n<=s.length();n++)
{
if('0'<=s[n]&&s[n]<='9'||s[n]=='.') cs[i++]=s[n];
else if('0'<=s[n-1]&&s[n-1]<='9'||s[n-1]=='.')
{
cs[i]='\0';
dat[j++]=atof(cs);
i=0;
}
else;
}
while(num>1)
{ j=-1;
for(int n=0;n<num;n++)
if(fuhao[n]>j){
j=fuhao
[n];
i=n;
}
switch(fuhao[i]%4){
case 1:dat[i-1]+=dat[i];break;
case 2:dat[i-1]-=dat[i];break;
case 3:dat[i-1]*=dat[i];break;
case 0:dat[i-1]/=dat
[i];break;
default:break;
}
for(int n=i;n<num;n++) fuhao[n]=fuhao[n+1];
for(int n=i;n<num;n++) dat[n]
=dat[n+1];
num--;
}
return dat[0];
}
int main(void)
{char a[]="-2.4*{-100/[10/[5-3]]}*(-0.3)";
cout<<jisuan(a)<<endl;;
system("pause");
return 0;
}