棧實現表示式計算

2021-09-29 16:39:56 字數 1589 閱讀 2042

原理:

數:入棧

『(』:入棧

『)』:運算子出棧,直到』(『和』)'匹配

運算子:

①:當前符優先順序>棧頂符優先順序:入棧

②:當前符優先順序<=棧頂符優先順序:棧內運算子出棧,運算後進棧,再比較

其中 */優先順序大於±

**如下:

先建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...