區別於常見計算器,本實現聚焦表達式解析引擎:16 位有效數字、容忍缺漏括號/隱式乘法 (如 cos23*sin34)、單一表達式內混合二/八/十/十六進制 (十六進制標識 xh、支援小數如 12d.3axh)、完善的歷史記錄與鍵鼠跟隨介面。
CString CCalculation::MainPro(CString strExp) {
if(strExp.IsEmpty()) return "表達式不能為空";
Macro(&strExp); strExp.MakeLower();
strExp.Insert(0,"("); strExp+=")"; // 保護括號
// 括號平衡檢查、空格清理、進制轉十進制
Oct2Dec(&strExp); Hex2Dec(&strExp); Bin2Dec(&strExp);
while(!IsDigital(strExp)) {
DelBracket(&strExp); // 找最內層括號對
if(!SynRes(&strExp)) return strExp; // 語法/運算錯誤檢查
}
if(!SynRes(&strExp)) return strExp;
return ModiResult(strExp); // 科學記數法格式化
}
關鍵點:
Macro 替換常數符號 (π, e 等)DelBracket 由內而外、由左而右提取最內層括號內表達式SynRes 檢測 ERROR 標記 (除零、語法錯誤等)strtod / _ecvt,輔以錯誤狀態控制Oct2Dec/Hex2Dec/Bin2Dec 掃描表達式,識別進制標識 (d 十進制、o 八進制、h/xh 十六進制、b 二進制),將數值部分轉為十進制字串回填,後續統一按十進制運算。
早期版本未妥善處理連續正負號 (1++++1, --+-+-+1),重寫 MultiE 解決;應網友建議新增結果向二/八/十六進制轉換輸出功能。
鍵盤/滑鼠雙模操作、視窗跟隨模式、計算歷史查看、科學記數法自動切換,細節打磨較充分。