日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT算数表达式求值

發布時間:2025/4/16 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT算数表达式求值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對之前的那個QT做的計算器,做一個修改。

原版本鏈接

有興趣的話,可以兩者結合起來,通過這個改進的過程,找到問題,進一步的提升。

新版本代碼:

#include "mainwindow.h" #include "ui_mainwindow.h" #include <stack> #include <QMessageBox> using namespace std; MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);ui->lineEdit->setFocus(); }MainWindow::~MainWindow() {delete ui; }void MainWindow::on_lineEdit_returnPressed() {QString s = ui->lineEdit->text();ui->lineEdit->clear();if (s.isEmpty()){return;}s = s.remove(" ");//remove the white space.if (s.toLower() == "quit"||s.toLower() == "q") {this->close();}stack<double> sn;stack<QChar> sc;for (int i = 0; i < s.size();) {if(s[i] >= '0' && s[i] <= '9') {int j = i + 1;for (; j < s.size() && ((s[j] >= '0' && s[j] <= '9') || s[j] == '.'); ++j);if (j < s.size()) {sn.push(s.mid(i,j-i).toDouble());i = j;} else {sn.push(s.mid(i,j-i).toDouble());i = j + 1;}} else if (s[i] == '('){sc.push(s[i]);i++;} else if (s[i] == '*' || s[i] == '/'){if(sc.size() != 0&&sc.top() == '-' && sc.size() >= sn.size() && sn.size() >= 1){double x = sn.top();sn.pop();sn.push(-x);sc.pop();}if (!sc.empty() && sc.top() == '*') {double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(x * y);sc.pop();} else if (!sc.empty() &&sc.top() == '/'){double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(y / x);sc.pop();}sc.push(s[i]);i++;} else if (s[i] == '+') {if (!sc.empty() &&sc.top() == '*') {double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(x * y);sc.pop();} else if (!sc.empty() &&sc.top() == '/'){double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(y / x);sc.pop();} else if (!sc.empty() &&sc.top() == '-'){double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(y - x);sc.pop();} else if (!sc.empty() &&sc.top() == '+'){double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(y + x);sc.pop();}sc.push(s[i]);i++;} else if (s[i] == '-') {if (!sc.empty() &&sc.top() == '*') {double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(x * y);sc.pop();} else if (!sc.empty() &&sc.top() == '/'){double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(y / x);sc.pop();} else if (!sc.empty() &&sc.top() == '-'){double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(y - x);sc.pop();} else if (!sc.empty() &&sc.top() == '+'){double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(y + x);sc.pop();}sc.push(s[i]);i++;} else if (s[i] == ')') {while(!sc.empty() && sc.top() != '('){if (!sc.empty() &&sc.top() == '+') {double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(x + y);sc.pop();} else if (!sc.empty() &&sc.top() == '-') {if (sn.size() > 1&& sc.size() <= sn.size()){double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(y - x);sc.pop();} else {double x = sn.top();sn.pop();sn.push(-x);sc.pop();}} else if (!sc.empty() &&sc.top() == '*') {double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(x * y);sc.pop();} else if (!sc.empty() &&sc.top() == '/') {double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(y / x);sc.pop();}}if (!sc.empty() &&sc.top() == '(')sc.pop();i++;} else {ui->textEdit_2->setText(s+'\n'+"Wrong calculate! Illegal Input!");return;}}while (!sc.empty()) {if (sc.top() == '('){sc.pop();continue;} else if (!sc.empty() &&sc.top() == '+') {if (sn.size() == 1) {break;} else if (sn.size() > 1){double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(x + y);}} else if (!sc.empty() &&sc.top() == '-') {if (sn.size() == 1){double x = sn.top();sn.pop();sn.push(-x);break;} else if (sn.size() > 1) {double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(y - x);}} else if (!sc.empty() &&sc.top() == '*') {if (sn.size() == 1){break;} else if (sn.size() > 1) {double x = sn.top();sn.pop();double y = sn.top();sn.pop();sn.push(x * y);}} else if (!sc.empty() &&sc.top() == '/') {if (sn.size() == 1){break;} else if (sn.size() > 1) {double x = sn.top();sn.pop();double y = sn.top();sn.pop();if (x == 0) {ui->textEdit_2->setText(s+'\n'+"Wrong calculate! No divide zero");return;}sn.push(y / x);}}sc.pop();}ui->textEdit_2->setText(s+"="+QString::number(sn.top())+'\n'+"Success calculate!"); }


總結

以上是生活随笔為你收集整理的QT算数表达式求值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩电影在线一区 | 国产又粗又长又大视频 | 久久久久亚洲日日精品 | 国产伦精品一区二区三区在线观看 | 蜜桃久久精品 | 黄色精品一区二区 | 国产美女极度色诱视频www | 狠狠干狠狠艹 | 久久激情五月 | 欧美日韩成人在线观看 | 巨胸喷奶水www久久久免费动漫 | 亚洲成人一级片 | 麻豆亚洲av成人无码久久精品 | 在线观看日本中文字幕 | 色中文字幕| 三级av在线播放 | 国产a久久 | 国产美女主播在线观看 | 国产www在线| 九九九热精品 | 97视频成人 | 偷偷操99 | 特黄一区二区 | 欧美一区精品 | 69堂在线观看| 久久盗摄| 成人在线视频免费看 | 日少妇av | 国产精品第五页 | 久草免费资源站 | 国产视频最新 | 欧美精品色 | 国产精品久久久久久久久 | 极品白嫩丰满美女无套 | 女人被男人躁得好爽免费视频 | 谁有免费黄色网址 | 国产乱淫av片杨贵妃 | 国产一区二区三区四区视频 | 裸体黄色片 | 福利一区二区视频 | 欧美性大战久久久久久久 | 欧美草比视频 | 亚洲精品午夜国产va久久成人 | h片免费在线观看 | 日韩v在线 | 亚洲黄色免费网站 | 久久精品无码一区二区三区免费 | 国产爆乳无码一区二区麻豆 | 91av一区二区三区 | 亚洲精品一区 | 久久久久国产一区二区三区 | 好吊色视频一区二区三区 | 人人妻人人爽欧美成人一区 | 国产欧美日韩一区二区三区 | 在线精品一区二区 | 欧洲一区二区三区四区 | 免费在线视频一区二区 | 国产一级片免费 | 蝌蚪久久 | 91久久超碰| 久久99国产精品久久99果冻传媒 | 成人一区二区三区 | 久久精品a亚洲国产v高清不卡 | 久久久久久久久久久久久久久久久久久 | 91青青操 | 神马午夜伦理 | 大地资源二中文在线影视免费观看 | 国产愉拍 | 999色综合 | 在线免费看黄色片 | 瑟瑟视频免费观看 | 视频国产在线 | 亚洲一区视频在线播放 | 日本乱论视频 | 亚洲美女视频网 | 亚洲av无码一区二区三区观看 | 精品人伦一区二区三区 | 国产成人精品一区二区三区四区 | 逼特逼视频在线观看 | 日韩欧美视频在线播放 | 男女免费观看视频 | 青草91| 奇米影音 | 日韩黄片一区二区三区 | 香蕉精品视频在线观看 | 日本一区二区人妻 | 国产成人精品无码免费看夜聊软件 | 免费啪视频在线观看 | 粗大黑人巨茎大战欧美成人免费看 | 清清草视频| av成人在线网站 | 美女福利视频在线观看 | 免费在线日韩 | 日韩一区二区三区视频 | 午夜888 | 黄色成年网站 | 亚洲另类一区二区 | 亚洲激情婷婷 | 超清纯大学生白嫩啪啪 |