c 實現帶加減乘除括號的式子運算

2021-09-28 14:35:37 字數 952 閱讀 1450

題目:

給定乙個帶加減乘除括號的表示式子字串,求其結果

如:(10+20)*3 的結果為90

思路:一、去括號。用乙個棧記錄左括號的位置,遍歷字串,讀取到右括號後棧pop,進行括號間式子的運算,並將結果字串替換回原字串。

二、進行不帶括號的式子的運算。用乙個棧記錄數字,乙個棧記錄運算子。讀到數字直接入棧,讀到運算子再進行運算。如果是乘號/除號,拿棧頂數字和下乙個數字進行運算,結果入棧;如果是加號/減號,如果運算子棧裡還有運算子(只可能是加/減),進行運算子和棧前兩個數的運算,結果入棧,再將當前運算子入棧。

三、特殊情況,字串第一位為負號時,前面補0。運算子後為負號時,提前進行下一位數字的讀取,計為負數。

#include #include #include #include using namespace std;

// 四則運算輔助函式

int helper(int a, int b, char op)

}// 讀取從i開始的整數,引用j表示該整數的最後一位的位置

int get_int(int i, int& j, string& s)

// 運算乙個不帶括號的式子

int cal(string s) else else

ops.push(s[i]);

}// 運算子後有減號,說明下乙個數是負數,提前讀取入棧

if(s[i+1] == '-') }}

// 因為加/減法是算前面的加減法,最後可能有剩餘乙個加法運算

if(!ops.empty())

return nums.top();

}int main() ;

for(auto& s:v)

else if(s[i] == ')')

}cout << cal(s) << endl;

} else

}}

實現帶括號加減乘除運算

問題描述 輸入乙個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。輸入格式 輸入一行,包含乙個表示式。輸出格式 輸出這個表示式的值。樣例輸入 1 2 3 4 5 樣例輸出 4資料規模和約定 表示式長度不超過100,表示式運算合法且運算過程都在int內進行。include includ...

C 位運算實現加減乘除

近日複習劍指offer,看到了當時寫第65題題實現了位運算的加減乘除法,特此記錄 int add int num1,int num2 return num1 int add2 int num1,int num2 2.一種減法運算 intnegtive int num1,int num2 3.一種乘法...

筆試題 C 利用棧實現帶括號的加減乘除

參考其他的思路,改了原來的bug。對浮點數 整數都適用。維護三個棧,分別存括號 數字 首先遍歷匹配括號,取出括號內的子字串 然後計算只包括 及數字的子字串的結果,先計算 將 全部入棧,然後計算只包含 的結果。include include include include includeusing n...