File tree Expand file tree Collapse file tree 2 files changed +40
-10
lines changed Expand file tree Collapse file tree 2 files changed +40
-10
lines changed Original file line number Diff line number Diff line change 14
14
* 5)当中序表达式的符号序列全部读入后,若栈内仍有元素,把它们依次弹出并放到后序表达式序列尾部。
15
15
* 若弹出的元素遇到空括号,则说明不匹配,发生错误,并进行相关处理
16
16
**/
17
- void inToPost (QString &infixexp , vector<QString> &postfixexp)
17
+ bool inToPost (QString &infixexp , vector<QString> &postfixexp)
18
18
{
19
19
if (infixexp.isNull ()) return ;
20
20
QString *number = new QString ();
21
- for (int var = 0 ; var < infixexp.size (); ++var) {
22
- switch infixexp.at (var)
23
- {
24
- case ' (' :
25
- break ;
26
- case ' )' :
27
- break ;
28
- case
21
+ QStack<char > stack;
22
+ for (int var = 0 ; var < infixexp.size (); ++var)
23
+ {
24
+ if (infixexp.at (var)>=' 0' && infixexp.at (var)<=' 9' ){
25
+ number->append (infixexp.at (var));
26
+ }else if (' (' == infixexp.at (var)) {
27
+ stack.push_back (infixexp.at (var));
28
+ }else if (' )' == infixexp.at (var)) {
29
+ if (stack.isEmpty ()) return false ;
30
+ char oper;
31
+ while (!stack.isEmpty ()){
32
+ oper = stack.pop ();
33
+ if (oper != ' (' )
34
+ postfixexp.push_back (oper);
35
+ }
36
+ }else if (isoperator (infixexp.at (var))){
37
+ if (!number->isEmpty ()){
38
+ postfixexp.push (*number);
39
+ number->clear ();
40
+ }
41
+ // operator handle
42
+
43
+ }else {
44
+ // Invalid input
45
+ return false ;
29
46
}
30
47
}
48
+ return true ;
31
49
}
50
+
51
+
52
+ bool handleOperator (char oper, QStack<char > & stack , vector<Qstring> & postfixexp)
53
+ {
54
+ while (!stack.isEmpty ())
55
+ {
56
+
57
+ }
58
+ }
Original file line number Diff line number Diff line change 1
1
#ifndef UTILITY
2
2
#define UTILITY
3
3
#include <QString>
4
+ #include <QStack>
4
5
5
6
6
7
const int DEFAULT_MODE = 1 ;
@@ -12,7 +13,9 @@ const int DELETE_MODE = 5;
12
13
* @param infixexp
13
14
* @return
14
15
*/
15
- void inToPost (QString & infixexp , vector < QString > & postfixexp );
16
+ bool inToPost (QString & infixexp , vector < QString > & postfixexp );
17
+
18
+ bool handleOperator (char oper , QStack < char > & stack , vector < Qstring > & postfixexp );
16
19
17
20
18
21
#endif // UTILITY
You can’t perform that action at this time.
0 commit comments