之所以寫這個,是因為最近在學習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...