字串 表示式求值

2022-09-18 03:57:31 字數 1328 閱讀 2572

不曾想到我居然還會寫這種部落格,然而自己是真的對這些模擬很噁心。

這簡單,可以遞迴求解,遇到乙個符號,直接往下遞迴。

這裡我的處理是有空格的,因此呢可以使用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字串中以分隔符 匹配的右邊字元,保留左邊字元。或 ...