Qt之加減乘除四則運算 支援負數

2021-09-07 19:17:09 字數 2306 閱讀 2922

圖1 四則運算展示

測試**如下

1

void

lineedit::calculateexpression()

2

在網上找了很多四則運算帖子,講的都挺不錯,思路很清晰,可是很少有拿來直接能用的,並且大多數的都不支援負數運算,既然是四則運算當然需要支援負數運算了,在這裡我們只需要使用一點兒小技巧即可。

1、針對負號進行字串修復 例如:-1*-3+2*(3+3) -> (0-1)*(0-3)+2*(3+3)。

1

//針對負號進行字串修復 例如:-1*-3+2*(3+3) -> (0-1)*(0-3)+2*(3+3)

2void repairexpress(qstring &express)318

19if (c == '

-'&&

20 (i == 0 || lpos != -1 && lpos == i - 1

))21

2526 lpos =i;27}

282930}

3132 express =result;

33 }

2、為了方便後續我們計算表示式,在中綴表示式轉字尾表示式時,我們在數字和負號之間加了乙個空格。

1

//數字和負號之間插入空格, 方便後續計算時分割

2void rettifyexpress(qstring &express)

38 }

中綴表示式:是乙個通用的算術或邏輯公式表示方法, 操作符是以中綴形式處於運算元的中間(例:3 + 4),中綴表示式是人們常用的算術表示方法。

字尾表示式:字尾表示式,指的是不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則)。

中綴表示式轉字尾表示式的方法:

1.遇到運算元:直接輸出(新增到字尾表示式中)

2.棧為空時,遇到運算子,直接入棧

3.遇到左括號:將其入棧

4.遇到右括號:執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出。

5.遇到其他運算子:加減乘除:彈出所有優先順序大於或者等於該運算子的棧頂元素,然後將該運算子入棧

6.最終將棧中的元素依次出棧,輸出。

下邊我直接給出實現**

1

//中綴表示式轉字尾表示式

2 qstring change(const qstring &s_mid)322

if (c == '

-' &&

23 (i == 0 || op.contains(s_mid[i-1])))//

可能為負號

2427

if(op.contains(c))//

判斷該元素是否為運算子

2837

stk.pop();38}

39else

if(stk.empty() || c == '

(' || op[c] > op[stk.top()])//

情況1、情況3

4043

else

if(op[c] <= op[stk.top()])//

情況344

52stk.push(c);53}

5455

rettifyexpress(result);56}

57else

5861}62

63while(stk.empty() == false)//

當中綴表示式輸出完成,所有元素出棧

6469

70return

result;

71 }

view code

通過字尾表示式計算時,我們就不需要考慮優先順序了,只需要嚴格按照從左向右,遇到負號取之前的兩個數值進行計算即可。

1

//計算表示式值

2double calexp(const qstringlist &express)325

26stk.push_back(qstring::number(result));27}

28else

2932}33

34return

result;

35 }

qt之加減乘除四則運算-支援負數

位運算實現加減乘除四則運算

只用邏輯運算實現加法 int add int a,int b int sumtemp a b int carry a b 1 return add 只用邏輯運算實現減法 int minus int a,int b 邏輯運算實現除法 低效 int div int a,int b return resu...

位運算實現加減乘除四則運算

目錄加法 減法 乘法 除法計算機最基本的操作單元是位元組 byte 乙個位元組由8個位 bit 組成,乙個位只能儲存乙個0或1,其實也就是高低電平。無論多麼複雜的邏輯 龐大的資料 酷炫的介面,最終體現在計算機最底層都只是對0101的儲存和運算。不考慮進製情況下,位的異或運算跟求 和 的結果一致 異或...

位運算實現加減乘除四則運算

目錄 加法減法 乘法除法 計算機最基本的操作單元是位元組 byte 乙個位元組由8個位 bit 組成,乙個位只能儲存乙個0或1,其實也就是高低電平。無論多麼複雜的邏輯 龐大的資料 酷炫的介面,最終體現在計算機最底層都只是對0101的儲存和運算。不考慮進製情況下,位的異或運算跟求 和 的結果一致 異或...