Skip to content

Commit 47d4699

Browse files
committed
finish +-*/
2 parents 414fb6b + f2cb701 commit 47d4699

File tree

5 files changed

+84
-12
lines changed

5 files changed

+84
-12
lines changed

computer.pro.user

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE QtCreatorProject>
3-
<<<<<<< HEAD
4-
<!-- Written by QtCreator 3.4.1, 2015-06-25T00:54:30. -->
5-
=======
6-
<!-- Written by QtCreator 3.4.1, 2015-06-25T17:13:24. -->
7-
>>>>>>> 7a2e9b8a3a528b40a431977f5e0f735425bbde72
3+
<!-- Written by QtCreator 3.4.1, 2015-06-27T11:37:46. -->
84
<qtcreator>
95
<data>
106
<variable>EnvironmentId</variable>
11-
<value type="QByteArray">{df87cc51-22e0-4c70-9073-e8dea8d2ba15}</value>
7+
<value type="QByteArray">{64a7b332-4bd0-4e67-b1ce-01f1d3e482dd}</value>
128
</data>
139
<data>
1410
<variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -232,7 +228,7 @@
232228
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
233229
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">computer</value>
234230
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">computer2</value>
235-
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:D:/github/ComputerByQt/computer.pro</value>
231+
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/coding/qt/ComputerByQt/computer.pro</value>
236232
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
237233
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">computer.pro</value>
238234
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>

utility.cpp

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ bool inToPost(QString &infixexp , QVector<QString> &postfixexp)
2323
{
2424
if(infixexp.at(var)>='0' && infixexp.at(var)<='9'){
2525
number->append(infixexp.at(var));
26+
//qDebug() << *number;
2627
}else if('(' == infixexp.at(var)) {
2728
stack.push_back(infixexp.at(var));
2829
}else if (')' == infixexp.at(var)) {
@@ -45,6 +46,14 @@ bool inToPost(QString &infixexp , QVector<QString> &postfixexp)
4546
return false;
4647
}
4748
}
49+
50+
if(!number->isEmpty())
51+
postfixexp.push_back(*number);
52+
53+
while (!stack.isEmpty()) {
54+
QChar element= stack.pop();
55+
postfixexp.push_back(element);
56+
}
4857
return true;
4958
}
5059

@@ -66,6 +75,50 @@ bool handleOperator(QChar oper, QStack<QChar> & stack , QVector<QString> &postfi
6675
return true;
6776
}
6877

78+
int computeBy(int left, int right, const QChar oper)
79+
{
80+
qDebug() << "oper:" << oper;
81+
switch(oper.unicode())
82+
{
83+
case '+':
84+
return left+right;
85+
case '-':
86+
return left-right;
87+
case '*':
88+
return left*right;
89+
case '/':
90+
return left/right;
91+
case '%':
92+
return left%right;
93+
}
94+
return 0;
95+
}
96+
97+
98+
int computePostfixexpression(QVector<QString> &postfixexpression)
99+
{
100+
QStack<int> stack;
101+
QVector<QString>::iterator element=postfixexpression.begin();
102+
while(element != postfixexpression.end())
103+
{
104+
if(((*element).size()==1) && isoperator((*element).at(0)))
105+
{
106+
int right = stack.pop();//先出来的是右操作数
107+
int left = stack.pop();
108+
if(stack.isEmpty())
109+
return computeBy(left,right,(*element).at(0));
110+
else{
111+
stack.push(left+right);
112+
}
113+
}else{
114+
bool ok;
115+
stack.push((*element).toInt(&ok, 10));
116+
}
117+
element++;
118+
}
119+
return -1;
120+
}
121+
69122

70123
bool isHigherPriority(const QChar oper1, const QChar oper2)
71124
{
@@ -95,10 +148,11 @@ bool isoperator(QChar oper)
95148

96149
void printQVector(QVector<QString> & vec)
97150
{
98-
QVector<QString>::const_iterator it_string = vec.begin();
99-
qDebug() << vec.size();
151+
QVector<QString>::iterator it_string = vec.begin();
152+
qDebug() << QString("postfixexpression size:") << vec.size();
100153
while(it_string != vec.end()){
101154
qDebug() << *it_string;
155+
it_string++;
102156
}
103157

104158
}

utility.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,15 @@ const int DELETE_MODE = 5;
3434
*/
3535
bool isHigherPriority(const QChar oper1, const QChar oper2);
3636

37+
/**
38+
* @brief computePostfixexpression
39+
* @param postfixexpression
40+
* @return
41+
*/
42+
int computePostfixexpression(QVector<QString> &postfixexpression);
43+
44+
int computeBy(int left, int right, const QChar oper);
45+
3746

3847
bool isoperator(QChar oper);
3948

widget.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,25 @@ void Widget::updateSequenceExpression(const QString &exp)
104104
sequenceExp = exp;
105105
}
106106

107+
void Widget::initialTextValues()
108+
{
109+
ui->digitinput->clear();
110+
ui->expressiontext->clear();
111+
sequenceExp.clear();
112+
}
113+
107114
void Widget::getComputeResult()
108115
{
109116
QVector<QString> vec;
110117
if(!ui->digitinput->toPlainText().isEmpty())
111118
appendSequenceExpression(ui->digitinput->toPlainText());
112-
qDebug() << getSequenceExpression();
119+
//qDebug() << "irginal expression:" <<getSequenceExpression();
113120
inToPost(getSequenceExpression() , vec);
114-
printQVector(vec);
121+
int result = computePostfixexpression(vec);
122+
qDebug() << result;
123+
// ui->digitinput->clear();
124+
// ui->expressiontext->clear();
125+
initialTextValues();
126+
ui->digitinput->appendPlainText(QString::number(result,10));
127+
115128
}

widget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#define WIDGET_H
33

44
#include <QWidget>
5-
#include <iostream>
65
#include "utility.h"
76

87
using namespace std;
@@ -34,6 +33,7 @@ private slots:
3433
QString& getSequenceExpression() ;
3534
void appendSequenceExpression(const QString &exp);
3635
void updateSequenceExpression(const QString &exp);
36+
void initialTextValues();
3737

3838
private:
3939
Ui::Widget *ui;

0 commit comments

Comments
 (0)