C++實(shí)現(xiàn)中綴轉(zhuǎn)后綴的示例詳解
單位數(shù)加減乘除
例如:2+3*(4-9)
定義一個(gè)棧內(nèi)優(yōu)先級
運(yùn)算符號 | 優(yōu)先級 |
---|---|
+、- | 3 |
*、/ | 5 |
( | 1 |
) | 6 |
# | 0 |
定義一個(gè)棧外優(yōu)先級
運(yùn)算符號 | 優(yōu)先級 |
---|---|
+、- | 4 |
*、/ | 2 |
( | 6 |
) | 1 |
# | 0 |
整個(gè)過程如下:
首先將#入棧,這是為了讓運(yùn)算符與棧內(nèi)的符號進(jìn)行比較是否入棧,否則無法判斷
- 2為數(shù)字,直接輸出
- +和#進(jìn)行運(yùn)算符比較,因?yàn)?的優(yōu)先級大于#,入棧
- 3為數(shù)字,直接輸出
- (和+進(jìn)行比較,(的優(yōu)先級比+大,將+取出輸出,將(入棧
- 4為數(shù)字,直接輸出
- -的優(yōu)先級比’(‘大,直接入棧。注意:此時(shí)的’('為棧內(nèi)優(yōu)先級
- 9為數(shù)字。直接輸出
- )優(yōu)先級比-大,取出-,同時(shí)()配對了,也要將(取出
- 最后遍歷棧內(nèi)運(yùn)算符即可
需要注意的點(diǎn)是:
就像這樣棧內(nèi)的頭頂兩個(gè)元素這樣(+,下一個(gè)符號剛好是),需要考慮到,取完+號后,需要把(也去取出來
實(shí)現(xiàn)代碼
#include<iostream> #include<stack> #include<string> using namespace std; //棧內(nèi)優(yōu)先級 int CompareIn(char c){ if(c=='('){ return 1; } if(c=='+'||c=='-'){ return 3; } if(c=='*'||c=='/'){ return 5; } if(c==')'){ return 6; } if(c=='#'){ return 0; } } //棧外優(yōu)先級 int CompareOut(char c){ if(c=='('){ return 6; } if(c=='+'||c=='-'){ return 2; } if(c=='*'||c=='/'){ return 4; } if(c==')'){ return 1; } if(c=='#'){ return 0; } } int main(){ string str; cin>>str; stack<char> q; q.push('#'); for(int i=0;i<str.length();i++){ if('1'<=str[i]&&str[i]<='9'){ cout<<str[i]; }else{ if(CompareIn(q.top())<CompareOut(str[i])){ q.push(str[i]); }else if(CompareIn(q.top())==CompareOut(str[i])){ q.pop(); }else if(CompareIn(q.top())>CompareOut(str[i])){ char ch=q.top(); q.pop(); cout<<ch; if(str[i]!=')'){ q.push(str[i]); } if(CompareIn(q.top())==CompareOut(str[i])){ q.pop(); } } } } while(CompareIn(q.top())!=0){ cout<<q.top(); q.pop(); } } }
到此這篇關(guān)于C++實(shí)現(xiàn)中綴轉(zhuǎn)后綴的示例詳解的文章就介紹到這了,更多相關(guān)C++中綴轉(zhuǎn)后綴內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言中變量與其內(nèi)存地址對應(yīng)的入門知識簡單講解
這篇文章主要介紹了C語言中變量與其內(nèi)存地址對應(yīng)的入門知識簡單講解,同時(shí)這也是掌握指針部分知識的基礎(chǔ),需要的朋友可以參考下2015-12-12在C++17中實(shí)現(xiàn)無鎖數(shù)據(jù)結(jié)構(gòu)的方法詳解
在探索?C++17?中的無鎖數(shù)據(jù)結(jié)構(gòu)之前,我們首先需要理解無鎖編程的基本概念及其在現(xiàn)代軟件開發(fā)中的重要性,在這個(gè)章節(jié)中,我們將深入探討無鎖編程的概念,以及它如何滿足人類對于更高效、更可靠軟件的本能需求,文中通過代碼示例介紹的非常詳細(xì),感興趣的朋友可以參考下2023-12-12詳解利用C語言如何實(shí)現(xiàn)簡單的內(nèi)存池
這篇文章主要給大家介紹了關(guān)于C語言如何實(shí)現(xiàn)簡單的內(nèi)存池的相關(guān)資料,設(shè)計(jì)內(nèi)存池的目標(biāo)是為了保證服務(wù)器長時(shí)間高效的運(yùn)行,通過對申請空間小而申請頻繁的對象進(jìn)行有效管理,減少內(nèi)存碎片的產(chǎn)生,合理分配管理用戶內(nèi)存,需要的朋友可以參考下2021-08-08C 與 C++ 接口函數(shù)相互調(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了C 與 C++ 接口函數(shù)相互調(diào)用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03OpenCV實(shí)現(xiàn)輪廓的發(fā)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了OpenCV如何實(shí)現(xiàn)輪廓的發(fā)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05