不曾想到我居然還會寫這種部落格,然而自己是真的對這些模擬很噁心。
這簡單,可以遞迴求解,遇到乙個符號,直接往下遞迴。
這裡我的處理是有空格的,因此呢可以使用atof將字串轉化了double,atoi好像是轉化為int。
#include#include#include#include#include#include#include#include#includeusing namespace std;
char s[10005];
double dfs()
int main()
考試考過,當時沒模擬出來,qwq。
事後發現其實也挺簡單的。
中綴表示式就乙個點,那就是符號的優先順序。括號其實都好處理,我們用棧,當右括號出現時就直接去彈棧,彈出左括號為止。
那麼怎麼處理符號的優先順序呢。
我們直接看四則運算吧,因為如果有乘方的話,思路其實是一樣的。中綴式,我們將左括號看做優先順序最低,右括號則最高。
我們用兩個棧,乙個放符號,乙個放數字,用乙個棧總感覺很亂,不好處理。
1.數字直接放入棧中。
2.當運算符號放入棧時,進行判斷,要開始彈棧了。彈棧操作很簡單,即取乙個符號,兩個數,進行運算再將結果放回去。注意減法除法順序。關鍵是條件判斷。(簡單來說總體就是維護棧中符號優先順序單調下降)
(1).棧頂元素優先順序大於等於當前要加入的元素,那麼彈出棧頂元素並進行計算。
(2).遇到了左括號或棧為空,則停止彈棧,加入元素。
3.遇到右括號,一直彈到左括號。
這裡不給**,給乙個噁心的題目鏈結(t3)
也挺簡單的,用棧,遇到符號取兩個數進行運算,遇到數字裝進去。
#include#include#include#include#include#include#include#include#includeusing namespace std;
char s[1005];
stacka;
void dfs()
x=a.top();
a.pop();
int y=a.top();
a.pop();
if (s[0]=='+')
a.push(x+y);
if (s[0]=='-')
a.push(y-x);
if (s[0]=='*')
a.push(x*y);
if (s[0]=='/')
a.push(y/x);
} printf("%d",a.top());
}int main()
關於字串表示式求值
由於自身思維不夠活躍,思考問題邏輯不夠清晰,所以小弟的師傅給小弟我布置了個作業,字串表示式求值,以此希望達到鍛鍊我思維邏輯能力的目的。歷時14天,完成作業,相關知識以及技術並不高深,目的在於鍛鍊邏輯思維能力。在此也想跟有相關需要的同學們分享下解題思路,有不足之處也希望大家不吝賜教,指點出來。謝謝。解...
字串求值 中綴表示式轉換為字尾表示式
中綴表示式轉換為字尾表示式 1.建立棧 2.從左向右順序獲取中綴表示式 a.數字直接輸出 b.運算子 情況一 遇到左括號直接入棧,遇到右括號將棧中左括號之 棧的運算子全部彈棧輸出,同時左括號出棧但是不輸出。情況二 遇到乘號和除號直接入棧,直到遇到優先順序比它更低的運算子,依次彈棧。情況三 遇到加號和...
shell 字串 表示式
在shell程式設計中,經常要處理一些字串變數。比如,計算長度啊 擷取子串啊 字元替換啊等等,常常要用到awk expr sed tr等命令。下面給大家介紹個簡單的字串處理方法,用不著巢狀複雜的子命令。計算value字串的字元數量。或 刪除value字串中以分隔符 匹配的右邊字元,保留左邊字元。或 ...