国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C語言數據結構之簡易計算器

2020-05-23 13:36:01
字體:
來源:轉載
供稿:網友

本文實例為大家分享了C語言簡易計算器的具體代碼,供大家參考,具體內容如下

主要解決了處理負數、小數等的基礎運算操作,無圖形界面

#include <iostream>#include <stack>using namespace std;class Calculator{private: int Priority(char fuhao); double CalSuffix(string PostfixExp);public: double Calculate(string InfixExp);  string InfixToSuffix(string InfixExp);};double Calculator::CalSuffix(string PostfixExp){ double tmpresult,ch1,ch2; double tmpnum,tmpxiaoshu=1; int i=0,tmpdashu; int isfu=0; /// stack<double> stk2; while(PostfixExp[i]!='/0'){  isfu=0; ///  if(PostfixExp[i]>=48&&PostfixExp[i]<=57){   if(PostfixExp[i-1]=='-'){  /////    isfu=1;   }   tmpxiaoshu=1;   tmpdashu=10;   tmpnum = PostfixExp[i]-48;   while(PostfixExp[++i]>=48&&PostfixExp[i]<=57){    tmpnum = tmpnum*tmpdashu+ (PostfixExp[i]-48);   }   i=i-1;   if(PostfixExp[++i]=='.'){    while(PostfixExp[++i]>=48&&PostfixExp[i]<=57){     tmpxiaoshu=tmpxiaoshu*0.1;     tmpnum = tmpnum + (PostfixExp[i]-48)*tmpxiaoshu;    }    i=i-1;   }   else{    i=i-1;   }   if(isfu){ ////    tmpnum=tmpnum*(-1);   }   stk2.push(tmpnum);  }  else if(PostfixExp[i]=='&'||PostfixExp[i]==' '){  }  else {   if(PostfixExp[++i]>=48&&PostfixExp[i]<=57){    i=i-1;   }   else {    i=i-1;    ch2 = stk2.top();    stk2.pop();    ch1 = stk2.top();    stk2.pop();    switch(PostfixExp[i]){     case '+': tmpnum = ch1 + ch2; break;     case '-': tmpnum = ch1 - ch2; break;     case '*': tmpnum = ch1 * ch2; break;     case '/': tmpnum = ch1 / ch2;      if(ch2==0) cout<<"除數為零";break;    }    stk2.push(tmpnum);   }  }  i++; } if(stk2.empty()!=1){  tmpresult = stk2.top();  stk2.pop(); } return tmpresult;}double Calculator::Calculate(string InfixExp){ double result; result = CalSuffix(InfixToSuffix(InfixExp)); return result;}int Calculator::Priority(char fuhao){ switch(fuhao){  case '+':  case '-': return 2;  case '*':  case '/': return 3;  case '(':  case ')': return 1;  default:   return 0; }}string Calculator::InfixToSuffix(string InfixExp){ stack<char> stk; string PostfixExp = "     "; int i=0,j=0; char tmpfuhao; int flag = 0; //判斷多位數的頭數是否為零 while(InfixExp[i]!='/0'){  if(InfixExp[i]>=48&&InfixExp[i]<=57){   flag = 0;   PostfixExp[j++]='&';   PostfixExp[j++]=InfixExp[i];   if(InfixExp[i]=='0'){    flag = 1;   }   while(InfixExp[++i]>=48&&InfixExp[i]<=57){    if(flag==0)     PostfixExp[j++]=InfixExp[i];    else     cout<<"輸入錯誤數字";   }   i=i-1;   if(InfixExp[++i]=='.'){    PostfixExp[j++]='.';    while(InfixExp[++i]>=48&&InfixExp[i]<=57){     PostfixExp[j++]=InfixExp[i];    }    i=i-1;   }   else{    i=i-1;   }  }  else if(InfixExp[i]=='('){   stk.push(InfixExp[i]);  }  else if(InfixExp[i]==')'){   if(stk.empty()){    cout<<"表達式錯誤!";   }   else{    tmpfuhao = stk.top();    while(tmpfuhao!='('){     if(stk.empty()){      cout<<"表達式錯誤!";     }     else{      PostfixExp[j++] = '&';      PostfixExp[j++] = tmpfuhao;      stk.pop();      tmpfuhao = stk.top();     }    }    stk.pop();   }  }  else if(InfixExp[i]=='+'||InfixExp[i]=='-'||InfixExp[i]=='*'||InfixExp[i]=='/'){   if(i==0||((InfixExp[--i]<48||InfixExp[i]>57)&&InfixExp[i]!=')')){    i++;    PostfixExp[j++]='&';    PostfixExp[j++]='-';    while(InfixExp[++i]>=48&&InfixExp[i]<=57){     PostfixExp[j++]=InfixExp[i];    }    i=i-1;    if(InfixExp[++i]=='.'){     PostfixExp[j++]='.';     while(InfixExp[++i]>=48&&InfixExp[i]<=57){      PostfixExp[j++]=InfixExp[i];     }     i=i-1;    }    else{     i=i-1;    }   }   else{    i++;   if(stk.empty()){    stk.push(InfixExp[i]);   }   else{    tmpfuhao = stk.top();    if(Priority(tmpfuhao)<Priority(InfixExp[i])){     stk.push(InfixExp[i]);    }    else{     while(Priority(tmpfuhao)>=Priority(InfixExp[i])){      PostfixExp[j++] = '&';      PostfixExp[j++] = tmpfuhao;      stk.pop();      if(stk.empty()!=1){       tmpfuhao = stk.top();      }      else break;     }     stk.push(InfixExp[i]);    }   }   }  }  else{   cout<<"符號錯誤!";   break;  }  i++; } while(!stk.empty()){  tmpfuhao = stk.top();  PostfixExp[j++] = '&';  PostfixExp[j++] = tmpfuhao;  stk.pop(); } PostfixExp[j++] = '/0'; return PostfixExp;}int main(int argc, const char * argv[]) { string a; Calculator a1; cin>>a; cout<<a1.Calculate(a)<<endl; cout<<a1.InfixToSuffix(a); return 0;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹤峰县| 保山市| 蒲江县| 湘乡市| 昭平县| 阜阳市| 布尔津县| 永泰县| 精河县| 星子县| 宜良县| 凌源市| 阜平县| 固安县| 清水河县| 龙游县| 新巴尔虎左旗| 盖州市| 达拉特旗| 牙克石市| 鄂尔多斯市| 开鲁县| 榕江县| 海林市| 潮安县| 北辰区| 海宁市| 铜梁县| 奇台县| 房产| 福州市| 沐川县| 苍梧县| 阆中市| 杨浦区| 无为县| 简阳市| 阿尔山市| 辛集市| 无锡市| 九江市|