problemscpp
A collection of my answers to algorithm problems in c++.
函数
acwing::acwing3302_408 命名空间参考

函数

int main (istream &cin, ostream &cout)
 
 TEST (acwing3302_408, case1)
 
 TEST (acwing3302_408, case2)
 
 TEST (acwing3302_408, case3)
 

函数说明

◆ main()

int acwing::acwing3302_408::main ( istream &  cin,
ostream &  cout 
)

在文件 acwing408.cpp223 行定义.

223 {
224 int x;
225 char y;
226 unordered_map<char, int> priority = {
227 {'+', 1},
228 {'-', 1},
229 {'*', 2},
230 {'/', 2}};
231 stack<char> op = stack<char>();
232 stack<int> num = stack<int>();
233 while(!cin.eof() || !cin.fail() || !cin.bad()) {
234 if(cin.peek() == EOF)
235 break;
236 if(isdigit(cin.peek())) {
237 cin >> x;
238 num.push(x);
239 } else {
240 cin >> y;
241 if(y == '(') {
242 op.push(y);
243 } else if(y == ')') {
244 while(!op.empty() && op.top() != '(') {
245 int b = num.top();
246 num.pop();
247 int a = num.top();
248 num.pop();
249 char c = op.top();
250 op.pop();
251 if(c == '+') {
252 num.push(a + b);
253 } else if(c == '-') {
254 num.push(a - b);
255 } else if(c == '*') {
256 num.push(a * b);
257 } else if(c == '/') {
258 num.push(a / b);
259 }
260 }
261 op.pop();
262 } else if(priority.find(y) != priority.end()) {
263 while(!op.empty() && op.top() != '(' && priority[op.top()] >= priority[y]) {
264 int b = num.top();
265 num.pop();
266 int a = num.top();
267 num.pop();
268 char c = op.top();
269 op.pop();
270 if(c == '+') {
271 num.push(a + b);
272 } else if(c == '-') {
273 num.push(a - b);
274 } else if(c == '*') {
275 num.push(a * b);
276 } else if(c == '/') {
277 num.push(a / b);
278 }
279 }
280 op.push(y);
281 }
282 }
283 }
284 while(!op.empty()) {
285 int b = num.top();
286 num.pop();
287 int a = num.top();
288 num.pop();
289 char c = op.top();
290 op.pop();
291 if(c == '+') {
292 num.push(a + b);
293 } else if(c == '-') {
294 num.push(a - b);
295 } else if(c == '*') {
296 num.push(a * b);
297 } else if(c == '/') {
298 num.push(a / b);
299 }
300 }
301 cout << num.top();
302 return 0;
303 }

被这些函数引用 TEST().

◆ TEST() [1/3]

acwing::acwing3302_408::TEST ( acwing3302_408  ,
case1   
)

在文件 acwing408_test.cpp910 行定义.

910 {
911 istringstream in("(2+2)*(1+1)");
912 auto out = ostringstream();
913 main(in, out);
914 const auto ans = out.str();
915 ASSERT_EQ("8",
916 ans);
917 }
int main(int argc, char **argv)
Definition: main.cpp:5

引用了 main().

◆ TEST() [2/3]

acwing::acwing3302_408::TEST ( acwing3302_408  ,
case2   
)

在文件 acwing408_test.cpp919 行定义.

919 {
920 istringstream in("(3+5*4/2+2*(1+1)*(2+2))");
921 auto out = ostringstream();
922 main(in, out);
923 const auto ans = out.str();
924 ASSERT_EQ("29", ans);
925 }

引用了 main().

◆ TEST() [3/3]

acwing::acwing3302_408::TEST ( acwing3302_408  ,
case3   
)

在文件 acwing408_test.cpp927 行定义.

927 {
928 istringstream in("2*10-1000+24-(5*3)+(3*2)");
929 auto out = ostringstream();
930 main(in, out);
931 const auto ans = out.str();
932 ASSERT_EQ("-965", ans);
933 }

引用了 main().