程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 括號計算器,帶括號的計算器

括號計算器,帶括號的計算器

編輯:C++入門知識

括號計算器,帶括號的計算器


//這計算器支持括號功能,格式例子3+(3*3)## ,後面打兩個#算結束,還有階乘和次方等功能留給同學們自己完善
#include <iostream> using namespace std; template<typename T> struct Node {//這個是數據結構模板,char和int都可以用 T data; Node<T>* next; }; template<typename T> class stack { Node<T>* top; public: stack():top(NULL){} void push(T n); T pop(); bool stackEmpty(); T getTop(); ~stack(){} void print(); }; template<typename T> void stack<T>::push(T n) { Node<T>* r=new Node<T>; r->data=n; r->next=top; top=r; } template<typename T> T stack<T>::pop() { Node<T> *ptr = top; top = top->next; T t=ptr->data; delete ptr; return t; } template<typename T> void stack<T>::print() { for(Node<T>* p=top;p;p=p->next) cout<<p->data<<" "; } template<typename T> T stack<T>::getTop() { return top->data; } template<typename T> bool stack<T>::stackEmpty() { if(top)return false; else return true; } bool In(char t) {//判斷是否字符函數 if(t>='0'&&t<='9')return false; else return true; } char Precede(char a,char b) {運算符優先級函數 if(a=='('&&b==')'||a=='#'&&b=='#') return '='; else if(a=='(' || a=='#' || b=='(' || (a=='+'&&a=='-')&&(b=='*'||b=='/')) return '<'; else return '>'; } int Operate(int first,char t,int second) {//運算函數 switch(t) { case '+': return first+second; case '-': return first-second; case '*': return first*second; case '/': return first/second; } return 0; } int EvaluateExpression() { char theta,x; int a,b; stack<char>OPTR;//操作符 stack<int>OPND;//數字 OPTR.push('#'); string s; cin>>s; for(int i=0;i<s.length()-1;) { if (!In(s[i])) { int sum=s[i]-'0'; i++; for(;!In(s[i])&&i<s.length()-1;i++) { int t=s[i]-'0'; sum=sum*10+t; } OPND.push(sum); }// ch不是運算符則進OPND棧 else switch (Precede(OPTR.getTop(),s[i])) { //比較OPTR的棧頂元素和ch的優先權 case '<': //當前字符ch壓入OPTR棧,讀入下一字符ch OPTR.push(s[i]); i++; break; case '>': //彈出OPTR棧頂的運算符進行相應運算,並將運算結果入棧 theta=OPTR.pop(); a=OPND.pop(); b=OPND.pop(); OPND.push(Operate(b,theta,a)); break; case '=': x=OPTR.pop(); i++; break; } // switch } // while return OPND.pop(); } int main() { cout<<"帥成計算器支持括號版,格式:(表達式+##) 例:2+2##"<<endl; for(;;) { cout<<EvaluateExpression(); cout<<endl; } return 0; }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved