網(wǎng)站首頁 編程語言 正文
單位數(shù)加減乘除
例如:2+3*(4-9)
定義一個棧內(nèi)優(yōu)先級
運算符號 | 優(yōu)先級 |
---|---|
+、- | 3 |
*、/ | 5 |
( | 1 |
) | 6 |
# | 0 |
定義一個棧外優(yōu)先級
運算符號 | 優(yōu)先級 |
---|---|
+、- | 4 |
*、/ | 2 |
( | 6 |
) | 1 |
# | 0 |
整個過程如下:
首先將#入棧,這是為了讓運算符與棧內(nèi)的符號進行比較是否入棧,否則無法判斷
- 2為數(shù)字,直接輸出
- +和#進行運算符比較,因為+的優(yōu)先級大于#,入棧
- 3為數(shù)字,直接輸出
- (和+進行比較,(的優(yōu)先級比+大,將+取出輸出,將(入棧
- 4為數(shù)字,直接輸出
- -的優(yōu)先級比’(‘大,直接入棧。注意:此時的’('為棧內(nèi)優(yōu)先級
- 9為數(shù)字。直接輸出
- )優(yōu)先級比-大,取出-,同時()配對了,也要將(取出
- 最后遍歷棧內(nèi)運算符即可
需要注意的點是:
就像這樣棧內(nèi)的頭頂兩個元素這樣(+,下一個符號剛好是),需要考慮到,取完+號后,需要把(也去取出來
實現(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();
}
}
}
原文鏈接:https://blog.csdn.net/weixin_66610130/article/details/127052478
相關(guān)推薦
- 2022-10-11 TCP/IP協(xié)議類比生活案例
- 2022-06-04 為Centos安裝指定版本的Docker_docker
- 2023-08-15 類對象數(shù)組抽取對象指定屬性重新組成新的類對象數(shù)組
- 2022-06-01 Python學習之內(nèi)置函數(shù)總結(jié)_python
- 2022-02-13 搞明白this指向,走遍天下都不怕(一)
- 2022-11-22 在?React?項目中全量使用?Hooks的方法_React
- 2022-09-01 ASP.NET?Core通用主機的系統(tǒng)配置_實用技巧
- 2022-08-23 使用Python腳本提取基因組指定位置序列_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支