使用棧來計算算術表示式

2021-08-01 21:45:36 字數 1545 閱讀 6345

之所以寫這個,是因為最近在學習c++的過程中,c++primer 第五版 9.6的習題跟這個有關,在網上看看些人的思路,也就做出來了,正好寫到部落格裡面。

原題如下:

使用 stack 處理括號化的表示式。當你看到乙個左括號,將其記錄下來。當你在乙個左括號之後看到乙個右括號,從 stack 中 pop 物件,直至遇到左括號,

將左括號也一起彈出棧。然後將乙個值(括號內的運算結果)push 到棧中,表示乙個括號化的(子)表示式已經處理完畢,被其運算結果所替代。

題目也給了思路,具體上**:

#include "stdafx.h"

#include#include#include#include#includeusing namespace std;

vectorprase(char *str) //分離每個符號

p[j++] = str[i++];

} p[j] = '\0';

j = 0;

len = strlen(p);

while (j < len)

; //儲存符號

string token;

switch (p[j])

else

default:

i = j;

while (isdigit(p[i]))

i++;

char *operand = (char*)malloc((i - j + 1) * sizeof(char));

memset(operand, 0, i - j + 1);

memcpy(operand, p + j, i - j);

operand[i - j] = '\0';

token = operand;

tokens.push_back(token);

free(operand);

j = i - 1;

break;

} j++;

} free(p);

return tokens;

}int priority(string opd)

void calculate(stack& opdstack, string opt)

else if (opt == "-")

else if (opt == "*")

else if (opt == "/")

else if (opt == "$") }

int computationalexp(char *str)

else

else

else

}optstack.push(token);}}

} else if (token == "(")

else if (token == ")")

optstack.pop();//彈出"("

} else

}while (optstack.size() != 0)

return opdstack.top();

}int main()

如有啥問題,請多多指教。

棧 算術表示式

將乙個算術表示式 即中綴形式 轉化成其字尾形式,並算出答案。include include include include include include using namespace std using namespace std bool isoperator char ch return f...

使用棧完成算術表示式的計算

需要兩個棧來分別儲存我們的操作符和數字 通過乙個 index 值 索引 來遍歷我們的表示式 如果我們發現是乙個數字,就直接入數棧 如果發現掃瞄到是乙個符號,就分如下情況 3.1 如果發現當前的符號棧為 空,就直接入棧 3.2 如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者等於棧中...

使用棧完成算術表示式的計算

基本思路 為了完成算術表示式的計算,用到了兩個棧,乙個用於存放運算元,另乙個用於存放操作符。假設 程式中定義了兩個棧 operandstack 用來存放運算元 operatorstack 用於存放操作符 在處理運算元和操作符之前,首先將它們壓入棧中。當要處理乙個操作符時,從operatorstack...