-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathevaluteExpressionString.cpp
More file actions
87 lines (83 loc) · 2.02 KB
/
evaluteExpressionString.cpp
File metadata and controls
87 lines (83 loc) · 2.02 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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <sstream>
#include <map>
#include <vector>
#include <queue>
using namespace std;
void removeSpaces(string &str)
{
int count = 0;
string newEx = "";
for (int i = 0; str[i]; i++)
if (str[i] != ' ')
newEx.push_back(str[i]);
str = newEx;
}
int evaluate(string expression, map<char, int> &variable_val) {
stringstream iss(expression);
string variable;
getline(iss,variable,'=');
variable = variable[0];
getline(iss,expression,';');
vector<int> allValue;
queue<char> signs;
int countV = 0;
int countS = 0;
bool digit = 0;
vector<char> opers = {'+','-','/','*'};
for(int i = 0; i<expression.size(); i++){
int va=0;
while(isdigit(expression[i])) {
va = va * 10 + (expression[i]-'0');
i++;
}
if(va) {
allValue.push_back(va);
}
bool sign = 0;
for(auto oper: opers){
if(expression[i]==oper){
signs.push(expression[i]);
sign = 1;
break;
}
}
if(!sign&&i<expression.size()){
char v = expression[i];
int variableVal = variable_val[v];
allValue.push_back(variableVal);
}
}
int res = allValue[0];
for(int i = 1; i<allValue.size(); i++){
char op = signs.front();
signs.pop();
if(op == '+'){
res += allValue[i];
}else if(op == '-'){
res -= allValue[i];
}else if(op == '*'){
res *= allValue[i];
}else {
res /= allValue[i];
}
}
variable_val[variable[0]] = res;
return 0;
}
int main()
{
vector<string> expressions = {
"p = 46 + 66;",
"l = 43 + p;",
"a =l+p;"
};
map<char, int> variable_val;
for (auto expression : expressions)
{
removeSpaces(expression);
int value = evaluate(expression, variable_val);
}
cout << variable_val['a'] << endl;
return 0;
}