原理:
數:入棧
『(』:入棧
『)』:運算子出棧,直到』(『和』)'匹配
運算子:
①:當前符優先順序>棧頂符優先順序:入棧
②:當前符優先順序<=棧頂符優先順序:棧內運算子出棧,運算後進棧,再比較
其中 */優先順序大於±
**如下:
先建compute.h標頭檔案
#pragma once
double compute
(char* str)
;//計算
bool isop
(char c)
;//判斷是否為運算子
int compareop
(char str, char sta)
;//判斷運算子優先順序,1入棧,0出棧,-1匹配
再建compute.cpp檔案
#include "compute.h"
#include
#include
using namespace std;
double compute
(char * str)
}else
//運算子,比較優先順序
elseif(
compareop
(str[i]
, opstack.
top())
==0)//優先順序小,棧內運算子出棧,運算後進棧,再比較;if
(opstack.
empty()
)//棧內無運算子,直接進棧
opstack.
push
(str[i]);
elseif(
compareop
(str[i]
, opstack.
top())
==1)//優先順序高,入棧了
opstack.
push
(str[i]);
else
//匹配上'(','('出棧
opstack.
pop();
}else
//匹配上'(','('出棧
opstack.
pop();
}}while
(!opstack.
empty()
)return numstack.
top();
}bool isop
(char c)
int compareop
(char str, char sta)
else
if(str ==
'*'|| str ==
'/')
//判斷 "*/"
else
//判斷 ")"
}
例:
#include "compute.h"
#include
#include
using namespace std;
int main()
得:21
ps:輸入資料不支援小數
棧實現表示式計算
讓index 1,並盤算是否掃瞄到expression最後 index if index expression.length 掃瞄完畢,就順序從數棧和符號棧中pop出相應的數和符號,並執行 while true num1 numstack.pop num2 numstack.pop oper ope...
棧實現表示式的計算
之前寫過這個的部落格,但是覺得不太好,都是截圖,所以我就趁有時間整理了一下。結果發現了乙個天大的低階錯誤。我在實現棧的時候把析構函式寫錯了 首先,執行的時候答案是對的,但是是記憶體錯誤表現 然後我就進行單步除錯 一直執行到最後一句 也沒有錯誤,直到最後乙個大括號就出現了.所以說明可能是出現了記憶體洩...
用棧實現表示式計算
public class calculator public static inthandle string express else else else else int num integer.parseint keepnum keepnum numstack.push num index if...