在前段时间搞定了温控系统后,嵌入式大作业要开始搞了
选定了计算器,一开始的想法是不能多不运算
但是前两天找了点资料,然后看了相关的堆栈计算方法,于是决定好好搞一下表达式运算
因为LINEEDIT->settext(QString str) 而计算则需要DOUBLE型,所以需要格式的多次转换,自己写了个ATOF(),FTOA()
还有负数的运算,则需要在加一些判断函数,同样,*-或/-是可以,所以在获取操作符也需要判断,因此ATOF中还要有对‘-’的判断。
void check()
{
char temp[10];
int i,j=0,k=0,len;
double r;
double c;
clearchar(temp);
pdatatemp1=data;
pdatatemp2=data+1;
Posi=0;
pstr=strdata-1;
len=string.length();
for(i=0;i<len;i++)
{
while((strdata[i]<58&&strdata[i]>47 )||( strdata[i]=='.' ))
{
temp[j++]=strdata[i++];
}
if(strdata[i]=='-'&&(strdata[i-1]=='*'||strdata[i-1]=='/'))
{
temp[j++]='-';
}
else{
data[k++]=atof(temp);
clearchar(temp); j=0;
data[k++]=strdata[i];
}
}
pdata=data;
scanf(1,&r);
push(r);
scanf(0,&c);
while(c!='=')
{
if(c=='*')
{
scanf(1,&r);
push(pop()*r);
}
else if(c=='/')
{
scanf(1,&r);
push(pop()/r);
}
else if(c=='+'||c=='-')
{
push(c);
scanf(1,&r);
push(r);
}
scanf(0,&c);
}
for(i=1;i<Posi;i=i+2)
{
if(datastack[i]=='+')
datastack[0]+=datastack[i+1];
else if(datastack[i]=='-')
datastack[0]-=datastack[i+1];
}
stringtemp.setNum(datastack[0]);
clearchar(strdata);
ftoa(datastack[0],strdata);
}