嵌入式 LINUX 大作业 带优先级 计算器

在前段时间搞定了温控系统后,嵌入式大作业要开始搞了

 

选定了计算器,一开始的想法是不能多不运算

 

但是前两天找了点资料,然后看了相关的堆栈计算方法,于是决定好好搞一下表达式运算

 

因为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    {
 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   {
 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);
   

你可能感兴趣的:(LINUX编程)