-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbasic.h
More file actions
60 lines (54 loc) · 1.5 KB
/
Copy pathbasic.h
File metadata and controls
60 lines (54 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef basic
#define basic
#include <vector>
class arithmeticOperation {
public:
double number;
char operation;
arithmeticOperation(double number, char operation){
this->number=number;
this->operation=operation;
}
};
double basicParse(const std::string& expresion){
std::vector<arithmeticOperation> arithmeticExpression;
std::string currNumber;
char currOperation='+';
for( const auto &c : expresion ) {
if(c=='+' || c=='-' || c=='*' || c=='/'){
arithmeticExpression.emplace_back(std::stod(currNumber), currOperation);
currNumber = "";
currOperation = c;
} else {
currNumber += c;
}
}
arithmeticExpression.emplace_back(std::stod(currNumber), currOperation);
std::vector<arithmeticOperation> reducedMultiply;
for (const auto el: arithmeticExpression){
switch (el.operation) {
case '*':
reducedMultiply.back().number *= el.number;
break;
case '/':
reducedMultiply.back().number /= el.number;
break;
default:
reducedMultiply.emplace_back(el);
break;
}
}
double result=0;
for (const auto el: reducedMultiply){
switch (el.operation) {
case '+':
result += el.number;
break;
case '-':
result -= el.number;
break;
}
}
return result;
}
#endif