国产探花免费观看_亚洲丰满少妇自慰呻吟_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武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 监利县| 晋中市| 利辛县| 汝城县| 大连市| 县级市| 鸡泽县| 南城县| 万源市| 库尔勒市| 漳浦县| 广州市| 吉水县| 蒙山县| 美姑县| 宜丰县| 肃北| 漠河县| 洪江市| 格尔木市| 济阳县| 呼玛县| 双桥区| 威远县| 昆明市| 汝城县| 新乡县| 盈江县| 昌江| 阳泉市| 龙游县| 朝阳县| 台安县| 潼南县| 四子王旗| 房产| 枣庄市| 新巴尔虎右旗| 濉溪县| 中牟县| 西贡区|