基於逆波蘭RPN演算法的計算器實現

2021-07-03 13:01:13 字數 1356 閱讀 9232

/*(1)主要使用stl容器實現棧的操作

*(2)使用vector分離字元與數字

*(3)stack是後進先出的資料結構,可以使用vector比較方便實現

*(4)stack只能插入、刪除、訪問棧頂的元素的操作:

* push:插入元素,pop: 彈出元素,top: 返回棧頂元素的引用

*(5)vector可以隨機遍歷元素:

* push_back:插入元素,front():讀取首元素

*(6)string轉換為數值使用stod()

*/#include #include#include#includeusing namespace std;

int get_prior_level(const string ch);

int main()

//處理輸入,將輸入數字,字元分開

for(char c:express)else

b.insert(b.begin(),c); //字元轉字串

str.push_back(b);

a="";

b="";}}

//push_back需要檢測不為空字串

if(!a.empty())

vectorexp; //字尾表示式vector

stackexp1; //符號處理棧

string::size_type i=0;

//生成字尾表示式

while(i!=str.size())

if(get_prior_level(str[i])>get_prior_level(exp1.top())||str[i]=="(")

exp1.pop(); //將棧中')'符號出棧

}exp1.pop(); //將棧中'('符號出棧

}}else

exp1.push(str[i]); //當前符號壓入棧中

}}else

++i;

}//將棧中剩餘符號全部壓入字尾表示式中

while(!exp1.empty())

i=0;

double tmp;

vectorresult;

//字尾表示式處理計算結果

while(i!=exp.size())

}else

++i;

}//棧中唯一的乙個數就是所需結果

cout<<"result:"

}//獲取運算子的優先順序

int get_prior_level(const string ch)

return 1;

}

逆波蘭計算器

include include include define stack init size 20 初始化棧的空間 define stackincrement 10 擴充套件空間 define maxbuffer 10 最大緩衝區 typedef double elemtype 建立乙個棧 type...

逆波蘭計算器

1.逆波蘭表示式用途 逆波蘭表示式是一種十分有用的表示式,它將複雜表示式轉換為可以依靠簡單的操作得到計算結果的表示式。例如 a b c d 轉換為ab cd 2.逆波蘭表示式邏輯實現 如果當前字元為變數或者為數字,則壓棧,如果是運算子,則將棧頂兩個元素彈出作相應運算,結果再入棧,最後當表示式掃瞄完後...

逆波蘭計算器

遍歷表示式。碰到數字將其放到棧中。遇到計算符 從棧中彈出兩個數用計算然後再從新入棧。a 在棧中的最後乙個數即為結果 轉換前 2 9 6 3 5 4轉換後 2963 5 4 使用逆波蘭計算結果為 16.0public class rpncalculator 如果是不是計算符,直接入棧 stack.pu...