首页 > 其他 > 详细

7-20 表达式转换 (25分)

时间:2020-03-02 23:40:28      阅读:433      评论:0      收藏:0      [点我收藏+]
  1 #include <iostream>
  2 #include <string>
  3 #include <cstring>
  4 using namespace std;
  5 
  6 class stack_
  7 {
  8 public:
  9     stack_() :r(-1), f(-1) {}
 10     ~stack_() {}
 11     void push(char k)
 12     {
 13         s[++r] = k;
 14     }
 15     char pop()
 16     {
 17         if (r != -1)
 18             return s[r--];
 19         else
 20             return \0;
 21     }
 22 public:
 23     char s[1000];
 24     int r;
 25     int f;
 26 };
 27 
 28 int main()
 29 {
 30     stack_ operate_, res_;
 31     char exp_[20];
 32     char* exp = exp_;
 33     int cnt = 0;
 34     
 35         cin.getline(exp_, 25);
 36         for (int i = 0; i < 25; i++)
 37         {
 38             if (\0 == exp_[i])break;
 39             //
 40             if (
 41                 (i == 0 && (exp_[i] == - || exp_[i] == +)) ||
 42                 (i >= 1 && ((exp_[i] == - || exp_[i] == +) && exp_[i - 1] == ())
 43                 )
 44             {
 45                 if (exp_[i] == -)
 46                 {
 47                     if (cnt == 0)
 48                     {
 49                           cout << -; cnt++;
 50                     }
 51                     else
 52                     {
 53                         //cout << ‘ -‘;
 54                         cout <<   << -; 
 55                     }
 56                 }
 57                 else if (exp_[i] == +)
 58                 {
 59                     if (cnt == 0)cnt++;//注意此处
 60                     else
 61                     {
 62                         cout <<  ; 
 63                     }
 64                 }
 65 
 66                 int j;
 67                 for (j = i + 1;; j++)
 68                 {
 69                     if ((exp_[j] > 0 && exp_[j] < 9) || exp_[j] == .)
 70                     {
 71                             cout << exp_[j];
 72                     }
 73                     else break;
 74                 }
 75                 j--;
 76                 i = j;
 77                 continue;
 78             }
 79             //
 80             else if (exp_[i] > 0 && exp_[i] < 9)
 81             {
 82                 if (cnt == 0)
 83                 {
 84                     cout << exp_[i]; cnt++;
 85                 }
 86                 else
 87                 {
 88                     cout <<   << exp_[i];
 89                 }
 90                 int j;
 91                 for (j = i+1;; j++)
 92                 {
 93                     if ((exp_[j] > 0 && exp_[j] < 9) || exp_[j] == .)
 94                     {
 95                             cout << exp_[j];
 96                     }
 97                     else break;
 98                 }
 99                 j--;
100                 i = j;
101                 continue;
102             }
103             //
104             else if (exp_[i] == ()
105             {
106                 operate_.push(exp_[i]);
107                 continue;
108             }
109             //
110             else if (exp_[i] == * || exp_[i] == /)
111             {
112                 while (1)
113                 {
114                     char ch = operate_.pop();
115                     if (ch != \0)
116                     {
117                         if (ch != / && ch !=  * )
118                         {
119                             operate_.push(ch);
120                             operate_.push(exp_[i]);
121                             break;
122                         }
123                         else
124                         {
125                             if (cnt == 0)
126                             {
127                                 cout << ch; cnt++;
128                             }
129                             else
130                                 cout <<   << ch; 
131                             continue;
132                         }
133                     }
134                     else//空栈
135                     {
136                         operate_.push(exp_[i]);
137                         break;
138                     }
139                 }
140             }
141             //
142             else if (exp_[i] == + || exp_[i] == -)
143             {
144                 while (1)
145                 {
146                     char ch = operate_.pop();
147                     if (ch != \0)
148                     {
149                         if (ch != / && ch != * && ch != + && ch != -)
150                         {
151                             operate_.push(ch);
152                             operate_.push(exp_[i]);
153                             break;
154                         }
155                         else
156                         {
157                             if (cnt == 0)
158                             {
159                                 cout << ch; cnt++;
160                             }
161                             else
162                                 cout <<   << ch; 
163                             continue;
164                         }
165                     }
166                     else
167                     {
168                         operate_.push(exp_[i]);
169                         break;
170                     }
171                 }
172             }
173             //
174             else if (exp_ [i]== ))
175             {
176                 char ch;
177                 while (1)
178                 {
179                     ch = operate_.pop();
180                     if (ch != \0)
181                     {
182                         if (ch != ()
183                         {
184                             if (cnt == 0)
185                             {
186                                 cout << ch; cnt++;
187                             }
188                             else
189                                 cout <<   << ch;                          
190                                 continue;
191                         }
192                         else
193                         {
194                             break;
195                         }
196                     }
197                     else
198                     {
199                         break;
200                     }
201                 }
202             }
203 
204         }//big for      
205         while (operate_.r != -1)
206         {
207             char ch = operate_.pop(); 
208                 if (cnt == 0)
209                 {
210                     cout << ch; cnt++;
211                 }
212                 else
213                     cout <<   << ch;  
214         }
215     return 0;
216 }

 

7-20 表达式转换 (25分)

原文:https://www.cnblogs.com/2020R/p/12398422.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!