資源簡介
C++數據結構實習。使用雙棧實現計算器,將算法從C++控制臺界面移植到Qt,并擴展了音樂播放,換膚,復制粘貼等功能。除此之外,還實現了鍵盤響應,冪運算,開方運算和三角函數等計算功能。Qt樣式表通過文件讀取實現換膚。原創,希望大家可以多多支持。如有問題請聯系我
代碼片段和文件信息
#include?“Calculator.h“
bool?Calculator::Run(QString?in?double?&?out?QString?&?errorInfo)
{
????index?=?0;
????oper.Push(‘#‘);
????input?=?in.toStdString();???//?將QString轉化為C++標準模板庫里的String
????char?ch?op;
????double?newOperand;
????Getch(ch);
????if?(ch?==?‘-‘?&&?s.IsEmpty())?s.Push(0);??//如果表達式的第一個數是負數的話,在操作數棧里壓一個0
????while?(!oper.IsEmpty()){
????????//?壓入操作數
????????if?(isdigit(ch)){
????????????if?(!charToDouble(ch?newOperand?errorInfo)){
????????????????Clear();
????????????????return?false;
????????????}
????????????s.Push(newOperand);
????????????//?如果操作數和pow?sqrt?sin?cos?tan之間缺少‘*‘號,則需要補‘*‘號
????????????if?(!LackMult(errorInfo))?{
????????????????Clear();
????????????????return?false;
????????????}
????????????Getch(ch);
????????}
????????//?壓入操作符
????????switch?(ch)
????????{
????????case?‘+‘:?case?‘-‘:?case?‘*‘:?case?‘/‘:?case?‘#‘:?case?‘(‘:?case?‘)‘:?case?‘%‘:
????????????oper.getTop(op);
????????????if?(isp(op)?????????????????if?(ch?==?‘(‘)?{
????????????????????oper.Push(ch);
????????????????????Getch(ch);
????????????????????//?判斷左括號后面是否跟著‘-’號,是的話將之后的操作數變為它的相反數。
????????????????????if?(ch?==?‘-‘)?s.Push(0);
????????????????}
????????????????else?{
????????????????????oper.Push(ch);
????????????????????Getch(ch);
????????????????}
????????????}
????????????else?if?(isp(op)?>?icp(ch))?{ //棧內操作符優先級大于棧外操作符優先級,棧內操作符出棧,進行運算
????????????????oper.Pop(op);
????????????????if?(op?==?‘(‘?||?op?==?‘)‘)?{ //?括號多出情況的錯誤檢測
????????????????????errorInfo?=?“無效的輸入!“;
????????????????????Clear();
????????????????????return?false;
????????????????}
????????????????if?(!DoOperator(op?errorInfo))?{
????????????????????Clear();
????????????????????return?false;
????????????????}
????????????}
????????????else?{
????????????????oper.Pop(op); //棧內操作符優先級等于棧外操作符優先級,可判斷為左括號,左括號出棧
????????????????if?(op?==?‘(‘)?Getch(ch);
????????????}
????????????break;
????????case?‘e‘:?case?‘E‘:?case?‘p‘:?case?‘s‘:?case?‘c‘:?case?‘t‘:?case?‘^‘:
????????????if?(!Extend(ch?errorInfo))?{
????????????????errorInfo?=?“無效的輸入!“;
????????????????Clear();
????????????????return?false;
????????????}
????????????Getch(ch);
????????????break;
????????case?‘‘: //?當檢測到pow()函數里的逗號時,需要先將‘(’和‘,’之間的表達式計算完畢
????????????oper.getTop(op);
????????????while?(op?!=?‘(‘)?{
????????????????oper.Pop(op);
????????????????if?(!DoOperator(op?errorInfo))?{
????????????????????Clear();
????????????????????return?false;
????????????????}
????????????????oper.getTop(op);
????????????}
????????????Getch(ch);
????????????if?(ch?==?‘-‘)?s.Push(0); //?判斷‘,’后面是否跟著‘-’號,是的話將之后的操作數變為它的相反數。
????????????break;
????????default:
????????????errorInfo?=?“無效的輸入!“;
????????????Clear();
????????????return?false;
????????}
????}
????if?(s.IsEmpty())?out?=?0;
????else?s.getTop(out);
????return?true;
}
void?Calculator::Clear()
{
????s.MakeEmpty();
????oper.Mak
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????1081406??2018-10-13?03:37??Calculator\calc-icon.ico
?????文件??????????42??2018-10-13?03:35??Calculator\calc-icon.rc
?????文件???????10135??2018-10-15?01:51??Calculator\calculator.cpp
?????文件?????????805??2018-10-10?20:59??Calculator\calculator.h
?????文件????????1203??2018-10-13?03:39??Calculator\Calculator.pro
?????文件???????23929??2018-10-15?12:50??Calculator\Calculator.pro.user
?????目錄???????????0??2018-10-13?03:32??Calculator\images\
?????文件???????13754??2018-10-12?10:08??Calculator\images\calculator-icon.png
?????文件???????19050??2018-10-11?02:00??Calculator\images\heartNext.png
?????文件????????5575??2018-10-12?01:23??Calculator\images\heartPause.png
?????文件???????18910??2018-10-11?01:59??Calculator\images\heartPlay.png
?????文件???????19017??2018-10-11?01:59??Calculator\images\heartPrevious.png
?????文件????????9088??2018-10-11?00:01??Calculator\images\high_volume.png
?????文件????????5239??2018-10-10?23:57??Calculator\images\lower_volume.png
?????文件????????5069??2018-10-10?23:55??Calculator\images\mute.png
?????文件???????16627??2018-10-11?00:21??Calculator\images\next.png
?????文件???????16217??2018-10-11?00:21??Calculator\images\pause.png
?????文件???????16227??2018-10-11?00:22??Calculator\images\play.png
?????文件???????16732??2018-10-11?00:21??Calculator\images\previous.png
?????文件????????7691??2018-10-10?23:58??Calculator\images\volume.png
?????文件?????????183??2018-09-29?19:01??Calculator\main.cpp
?????文件???????13804??2018-10-15?01:25??Calculator\mainwindow.cpp
?????文件????????3007??2018-10-15?02:01??Calculator\mainwindow.h
?????文件???????33802??2018-10-13?02:11??Calculator\mainwindow.ui
?????目錄???????????0??2018-10-11?23:21??Calculator\music\
?????文件?????3710351??2018-10-11?12:31??Calculator\music\My?Soul?(Bonus?Track).mp3
?????文件?????4477703??2018-10-11?23:20??Calculator\music\陳煥明?-?天空之城.mp3
?????文件?????4078984??2018-10-11?23:20??Calculator\music\玖月花兒與箏?-?琵琶語?(古箏版).mp3
?????文件?????????493??2018-10-15?02:13??Calculator\myhelper.h
?????文件????????1444??2018-10-09?01:31??Calculator\mystack.h
?????文件?????????875??2018-10-13?02:00??Calculator\res.qrc
............此處省略3個文件信息
- 上一篇:URF-R330開發包
- 下一篇:[浮點計算-編程原理.實現與應用].劉純根
評論
共有 條評論