日韩性视频-久久久蜜桃-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算数表达式求值的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 婷婷俺也去| 国产精品免费一区 | 一曲二曲三曲在线观看中文字幕动漫 | 精品视频免费在线 | 久久鲁鲁 | 久久久资源网 | 日韩欧美大陆 | 欧美在线免费观看视频 | 亚洲一| 国产91av在线播放 | 亚洲成人黄色影院 | 国产suv精品一区二区69 | 国产精品久久久久久亚洲色 | 小早川怜子久久精品中文字幕 | 国产寡妇色xxⅹ交肉视频 | 一级v片| 国产精品一二三区 | 亚洲第一网站 | 2021天天操| 天天激情 | 欧美精品久久天天躁 | 91午夜视频在线观看 | 欧美三级一区二区 | 精品久久久在线观看 | 国产乱码精品一区二区三区五月婷 | 1024中文字幕| 操操插插| 人人草人人射 | 日韩人成 | 干干日日| 少妇综合 | aaa在线视频 | 吻胸摸激情床激烈视频 | 一区二区不卡视频 | 美女扒开尿口让男人爽 | 欧美成人免费高清视频 | 天天色影| 成年人视频免费在线观看 | 欧美视频日韩 | 亚洲精品视频播放 | 青青草原成人网 | 久久婷婷五月综合 | 米奇7777狠狠狠狠视频 | 大奶一区二区 | 黄a大片| 香蕉视频一区 | 成人午夜高清 | a√国产| 国产精品视频 | 色综合图片 | 国产成人综合精品 | 国产一级视频在线播放 | 一区免费视频 | 久久99久久99 | www五月| 精品中文字幕在线观看 | 亚洲精选久久久 | 国产又粗又猛又黄又爽视频 | 香港三级日本三级韩国三级 | 久久九九免费视频 | 网站国产| 91theporn国产在线观看 | 国产妞干网| 午夜视频在线看 | 天堂av在线电影 | 777久久久| 国产日韩精品一区二区三区在线 | 亚洲精品一区二区18漫画 | 尤物最新网址 | 天堂网av中文字幕 | 国产又粗又长又大视频 | 51免费看成人啪啪片 | 中文字幕无人区二 | 亚洲国产精品区 | 欧美成人免费在线视频 | 秋霞影院午夜丰满少妇在线视频 | 无码精品一区二区免费 | 久久亚洲AV无码 | 国产又爽又黄免费软件 | 葵司有码中文字幕二三区 | 亚洲激情视频在线观看 | 国产素人在线 | 亚洲乱仑 | 亚洲高清久久 | 国产 日韩 欧美 精品 | 琪琪色综合网 | 国产91在线高潮白浆在线观看 | 特黄特色大片免费 | 国产欧美日韩三级 | 午夜在线一区 | 色五五月| 日本一区二区三区四区五区 | 寡妇高潮一级视频免费看 | 免费一级suv好看的国产网站 | 日韩在线不卡视频 | 亚洲成人另类 | 少妇裸体视频 | 免费网站观看www在线观 | 亚洲第一精品网站 |