该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#define UINT unsigned int
struct LOGIC
{
UINT logic,site;
};
char *text="+8*9*(8+7)+12/6-4";
int calc_exp(char *sz);
int calc_part(int a,int b,UINT w);
int main(int argc,char *argv[])
{
std::cout<
std::cin.get();
return 0;
}
int calc_exp(char *sz)
{
int calc_rt=0;
UINT szcnt=0;
LOGIC *logic;
UINT *expval;
UINT lcnt=0;
UINT ecnt=0;
bool bj=false;
UINT ti=0;
int tn=0;
int tr=0;
char *tch=0;
szcnt=sizeof(sz);
bj=false;
for(UINT i=0;i
{
switch(sz[i])
{
case '+':
case '-':
case '*':
case '/':
case '(':
case ')':
bj=false;
lcnt++;
break;
default:
if(bj==false)
{
ecnt++;
bj=true;
}
break;
}
}
if(lcnt!=0)logic=new LOGIC[lcnt];
if(ecnt!=0)expval=new UINT[ecnt];
else return 0;
bj=false;
ti=0;
tn=0;
for(UINT i=0;i
{
switch(sz[i])
{
case '+':
case '-':
case '*':
case '/':
case '(':
case ')':
switch(sz[i])
{
case '+':
logic[ti].logic=0;
break;
case '-':
logic[ti].logic=1;
break;
case '*':
logic[ti].logic=2;
break;
case '/':
logic[ti].logic=3;
break;
case '(':
logic[ti].logic=4;
break;
case ')':
logic[ti].logic=5;
break;
}
bj=false;
ti++;
break;
default:
if(bj==false)
{
if(tch!=0)
{
delete[] tch;
tch=0;
}
tch=new char[logic[ti].site-i];
for(UINT j=i;j
{
tch[j-i]=sz[j];
}
expval[tn]=atoi(tch);
tn++;
bj=true;
}
break;
}
}
if(tch!=0)
{
delete[] tch;
tch=0;
}
if(lcnt==0)return expval[0];
ti=0;
tn=-1;
while(ti
{
switch(logic[ti].logic)
{
case 0:
case 1:
if(tn!=-1)
{
calc_part(calc_rt,tr,logic[tn].logic);
tn=-1;
}
else
{
tn=ti;
tr=expval[ti];
}
break;
break;
case 2:
tr*=expval[ti];
break;
case 3:
tr/=expval[ti];
break;
case 4:
for(UINT j=ti;j
{
if(logic[j].logic==5)
{
tch=new char[logic[j].site-logic[ti].site-1];
for(UINT k=0;k
{
tch[k]=sz[logic[ti].site+1+k];
}
calc_part(tr,calc_exp(tch),logic[ti-1].logic);
ti=j;
break;
}
}
break;
}
ti++;
}
return calc_rt;
}
int calc_part(int a,int b,UINT w)
{
switch(w)
{
case 0:
return (a+b);
break;
case 1:
return (a-b);
break;
case 2:
return (a*b);
break;
case 3:
return (a/b);
break;
}
}
还没测试过,做个构思吧,我百度了一下,你去这个地方看,那里跟你想要的更合适:
http://wenku.baidu.com/view/b841d90003d8ce2f006623cf.html