基本分析可以看另一篇文章c++實現四則運算器(無括號)
棧的實現
#ifndef stack_h
#define stack_h
#includeclass stack_int
; stack_int(unsigned int capacity) :bottom(new int[capacity+1]),top(bottom), capacity(capacity),size(0){};
int operator(unsigned int i) const
bool isempty()const
bool isfull()const
unsigned int getsize()const
unsigned int getcapacity()const
int gettop()const
void settop(int i) }
void push(int i)
else
}private:
void stack_expansion()
bottom = newbottom;
top = newtop;
capacity = newcapacity;
}};#endif
主程式
#include"stack.h"
#includeusing namespace std;
bool is_digit(char i)
bool is_operator(char i)
bool get_priority(char pre,char cur)
int do_operation(int lnum, char ope, int rnum)
/*1+2*3=
1*(2+1*(3+5)+4*3)=
先乘除,後加減,有括號先算括號內的
1+5*4-345+36/6*4+145*4*5-52=
*/void do_arithmetic()
num_stack.push(num);
//cout <<"the number is " <";
do_arithmetic();
} return 0;
}
程式大部分與不帶括號版本很相似,主要更改了兩個方面:
1.對於左括號,令左括號左邊運算子優先順序低於左括號,右邊運算子優先順序高於左括號(即,只要含有左括號的比較結果均為無法進行運算,函式get_priority返回值永遠為false)。2.對於右括號,令右括號左邊的運算子(除左括號外)優先順序均高於右括號,並且當右括號左邊的符號為左括號時,兩個括號相抵消,左括號退棧。
遇到右括號時,兩括號內的+-*/運算全部可以進行,直到符號棧棧頂為左括號。
C 實現四則運算器 無括號
完成度更高的有括號版本c 實現四則運算器 有括號 對於無括號的計算器,實現起來比較容易,下面讓我們一步步實現。舉例首先明確需要實現怎樣的程式,對於無括號的計算器,大概做成這樣就可以了 52 34 3 4 2 分析 對於例子中的表示式,由於乘除運算的優先順序高於加減運算,我們不能直接從左到右進行。但四...
C 四則運算器
leetcode上的題,只有 空格,計算所給表示式的數值 我現在用的辦法是 中綴表示式轉字尾表示式,然後計算 但是leetcode最後乙個示例是長度為20w的表示式,直接給我弄超時了,先把 放在這裡吧 計算器 include include include includeusing namespac...
分數四則運算器
好的,先弄出個類來,如下 view code 1 class fraction2 各成員實現如下 view code 1 建構函式 2fraction fraction intx,inty 310 denominator y 11 1213 fraction fraction 1417 加法 18c...