C++ 基礎計算器
假設我們想要建立一個基本的計算器,用於計算基本表示式的結果。表示式可以包含括號、加號或減號以及空格。
例如,如果字串為“5 + 2 - 3”,則結果為 7。
為了解決這個問題,我們將遵循以下步驟:
ret := 0,sign := 1,num := 0,n := s 的大小
定義一個棧 st
初始化 i := 0,當 i < n 時,i 增加 1:
定義一個數組 x = s,大小為 i
如果 x >= '0' 且 x <= '9',則:
num = num * 10
num = num + (x - '0')
否則,如果 x 等於 '(',則:
ret = ret + (sign * num)
將 ret 推入 st
將 sign 推入 st
ret := 0,sign := 1,num := 0
否則,如果 x 等於 ')',則:
ret = ret + (sign * num),sign := 1,num := 0
ret = ret * st 的棧頂元素
從 st 中彈出元素
ret = ret + st 的棧頂元素
從 st 中彈出元素
否則,如果 x 等於 '+',則:
ret = ret + (sign * num),sign := 1,num := 0
否則,如果 x 等於 '-',則:
ret = ret + (sign * num),sign := -1,num := 0
如果 num 不為零,則:
ret = ret + sign * num
返回 ret
示例
讓我們看看下面的實現,以更好地理解:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int calculate(string s) {
int ret = 0;
int sign = 1;
int num = 0;
int n = s.size();
stack <int> st;
for(int i = 0; i < n; ++i){
char x = s[i];
if(x >= '0' && x <= '9'){
num *= 10;
num += (x - '0');
}
else if(x == '('){
ret += (sign * num);
st.push(ret);
st.push(sign);
ret = 0;
sign = 1;
num = 0;
}
else if(x == ')'){
ret += (sign * num);
sign = 1;
num = 0;
ret *= st.top();
st.pop();
ret += st.top();
st.pop();
}
else if(x == '+'){
ret += (sign * num);
sign = 1;
num = 0;
}
else if(x == '-'){
ret += (sign * num);
sign = -1;
num = 0;
}
}
if(num){
ret += sign * num;
}
return ret;
}
};
main(){
Solution ob;
cout << (ob.calculate("5 + 2 - 3"));
}輸入
"5 + 2 - 3"
輸出
4
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP