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 }
原文:https://www.cnblogs.com/2020R/p/12398422.html