C++實(shí)現(xiàn)中綴轉(zhuǎn)后綴的示例詳解
單位數(shù)加減乘除
例如:2+3*(4-9)
定義一個(gè)棧內(nèi)優(yōu)先級(jí)
| 運(yùn)算符號(hào) | 優(yōu)先級(jí) |
|---|---|
| +、- | 3 |
| *、/ | 5 |
| ( | 1 |
| ) | 6 |
| # | 0 |
定義一個(gè)棧外優(yōu)先級(jí)
| 運(yùn)算符號(hào) | 優(yōu)先級(jí) |
|---|---|
| +、- | 4 |
| *、/ | 2 |
| ( | 6 |
| ) | 1 |
| # | 0 |
整個(gè)過程如下:
首先將#入棧,這是為了讓運(yùn)算符與棧內(nèi)的符號(hào)進(jìn)行比較是否入棧,否則無法判斷
- 2為數(shù)字,直接輸出
- +和#進(jìn)行運(yùn)算符比較,因?yàn)?的優(yōu)先級(jí)大于#,入棧
- 3為數(shù)字,直接輸出
- (和+進(jìn)行比較,(的優(yōu)先級(jí)比+大,將+取出輸出,將(入棧
- 4為數(shù)字,直接輸出
- -的優(yōu)先級(jí)比’(‘大,直接入棧。注意:此時(shí)的’('為棧內(nèi)優(yōu)先級(jí)
- 9為數(shù)字。直接輸出
- )優(yōu)先級(jí)比-大,取出-,同時(shí)()配對(duì)了,也要將(取出
- 最后遍歷棧內(nèi)運(yùn)算符即可
需要注意的點(diǎn)是:
就像這樣棧內(nèi)的頭頂兩個(gè)元素這樣(+,下一個(gè)符號(hào)剛好是),需要考慮到,取完+號(hào)后,需要把(也去取出來
實(shí)現(xiàn)代碼
#include<iostream>
#include<stack>
#include<string>
using namespace std;
//棧內(nèi)優(yōu)先級(jí)
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)先級(jí)
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
C語言結(jié)構(gòu)體內(nèi)存對(duì)齊問題小結(jié)
matlab鳥群算法求解車間調(diào)度問題詳解及實(shí)現(xiàn)源碼
C語言實(shí)現(xiàn)掃雷小游戲簡(jiǎn)單版
C語言+EasyX實(shí)現(xiàn)數(shù)字雨效果
深入詳解C編寫Windows服務(wù)程序的五個(gè)步驟
Qt QChart 創(chuàng)建圖表的實(shí)現(xiàn)方法

