參考其他網友的思路,改了原來的bug。對浮點數、整數都適用。
維護三個棧,分別存括號、 + -*/ 、數字
首先遍歷匹配括號,取出括號內的子字串;
然後計算只包括 + -*/ 及數字的子字串的結果,先計算* / ,將 + -全部入棧,然後計算只包含 + -的結果。
#include#include#include#include#includeusing namespace std;
double calc(string s)
//將第乙個數字壓入數字棧
stringstream ss(s);
ss >> val;
num.push(val);
//每次讀取乙個符號和數字
while (ss >> c >> val)
else
num.pop();//彈出已經計算過的數
num.push(val);//壓入計算後的結果
} else//符號是+-
}//操作符棧不為空,只有加減運算
while(!op.empty())
else
op.pop();
} return num.top();
}int main()
else//括號匹配
}} double result = calc(str);
cout << result << endl;
return 0;
}
c 實現帶加減乘除括號的式子運算
題目 給定乙個帶加減乘除括號的表示式子字串,求其結果 如 10 20 3 的結果為90 思路 一 去括號。用乙個棧記錄左括號的位置,遍歷字串,讀取到右括號後棧pop,進行括號間式子的運算,並將結果字串替換回原字串。二 進行不帶括號的式子的運算。用乙個棧記錄數字,乙個棧記錄運算子。讀到數字直接入棧,讀...
棧實現的帶括號的計算器
帶括號的表示式計算 通過棧的應用來實現,建立運算元棧和運算子棧,運算子有優先順序。規則 1.自左至右掃瞄表示式,凡是遇到運算元一律進運算元棧。2.當遇到運算子時如果它的優先順序比運算子棧棧頂元素的優先順序高就進棧。反之,取出棧頂運算子和運算元棧棧頂 的連續兩個運算元進行運算,並將結果存入運算元棧,然...
棧實現的帶括號的計算器
帶括號的表示式計算 通過棧的應用來實現,建立運算元棧和運算子棧,運算子有優先順序。規則 1.自左至右掃瞄表示式,凡是遇到運算元一律進運算元棧。2.當遇到運算子時如果它的優先順序比運算子棧棧頂元素的優先順序高就進棧。反之,取出棧頂運算子和運算元棧棧頂 的連續兩個運算元進行運算,並將結果存入運算元棧,然...