前面呢,我們實現了沒有括號的混合運算,現在我們需要解決混合運算的等式中有多重的括號的等式,其實這個問題換乙個角度想其實非常簡單的,來,北鼻,跟著我一起......
回歸正題。。。
說白了就是把"(2+3*3)"替換成"11" 思路明白了吧?就是把最裡面的一對括號裡面的內容先計算,然後計算結果替換那對括號.好,開工!
第一步:找到最裡面的一對括號
為什麼要找到最裡面的一對括號呢,原先我們能計算除了括號的混合運算,現在加了括號,原先的parse方法又不認識了,parse方法只認識沒有括號的,所以這裡你要做的工作就是找到括號,然後計算括號裡面的字串,然後替換括號的位置
1.找到最裡面的那一對括號 "(2+6-(2*2+1)) + (2*2+5)" 對於這個字串最裡面的括號就是"(2*2+1)" 因為這對括號裡面已經沒有括號了,所以我們找的就是這樣子的括號
2.計算括號裡面的字串,然後完成替換
在parse方法的最前面加了一層判斷,也就是**如果走到這個判斷下面了,就代表這個等式已經沒有括號了,因為有括號就在if語句裡面直接返回了
還是拿上面的"(2+6-(2*2+1)) + (2*2+5)"為例,找到的最裡面的一對括號為"(2*2+1)"
對裡面的資料進行計算,替換原來的位置,也就是"(2+6-
" "5" ") + (2*2+5)"
這三個字串進行拼接,也就是-->"(2+6-5) + (2*2+5)
",然後又呼叫自己,又有括號,又替換括號部分.....最後結果duang的一下就出來,這是特技!請不要相信!!!
最後奉上計算結果圖:
附上完整parse方法源**
/**
* 實現混合運算
* * @param content
* @return
*/public static double parse(string content)
int index = content.indexof("+");
if (index != -1)
// 這裡
index = content.lastindexof("-");
if (index != -1)
// 這裡
index = content.indexof("*");
if (index != -1)
// 這裡
index = content.lastindexof("/");
if (index != -1)
return double.parsedouble(content);
}
QT簡易計算器 表示式計算核心演算法(二)
概述 上篇我主要介紹了用qt做計算器的整個流程,這次主要就是分析一下,計算器表示式計算的演算法部分。因為也找了很多別人寫的 但大多都是只支援個位數的加減乘除,小數也不支援,所以就在原有框架上,修改,優化,讓其滿足我想要的功能。1,表示式計算思路。表示式資料操作符分割 轉為逆波蘭表示式 計算逆波蘭表示...
演算法提高 計算器
問題描述 王小二的計算器上面的led顯示屏壞掉了,於是他找到了在計算器維修與應用系學習的你來為他修計算器。螢幕上可以顯示0 9的數字,其中每個數字由7個小二極體組成,各個數字對應的表示方式如圖所示 為了排除電路故障,現在你需要計算,將數字a變為數字b需要經過多少次變換?注意 現在將其中每段小二極體的...
演算法提高 計算器
問題描述 王小二的計算器上面的led顯示屏壞掉了,於是他找到了在計算器維修與應用系學習的你來為他修計算器。螢幕上可以顯示0 9的數字,其中每個數字由7個小二極體組成,各個數字對應的表示方式如圖所示 為了排除電路故障,現在你需要計算,將數字a變為數字b需要經過多少次變換?注意 現在將其中每段小二極體的...