-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparser.cpp
143 lines (141 loc) · 4.19 KB
/
parser.cpp
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include "parser.h"
int ctoi(char a) {
char *c = &a;
int i = atoi(c);
return i;
}
string Parser::parseFunction(string functionin, int x) {
string function = functionin;
for (int i = 0; i < function.length(); i++) {
if (function[i] == 'x') {
function[i] = x + '0';
}
}
for (int i = 0; i < function.length(); i++) {
if (function[i] == '*') {
string multbefore = "";
char curr = function[i - 1];
int j = i - 1;
while (curr != ' ' && curr != '*' && curr != '/' && curr != '+' && curr != '-' && j >= 0) {
multbefore += curr;
j--;
curr = function[j];
}
reverse(multbefore.begin(), multbefore.end());
string multafter = "";
curr = function[i + 1];
j = i + 1;
while (curr != ' ' && curr != '*' && curr != '/' && curr != '+' && curr != '-' && j < function.length()) {
multafter += curr;
j++;
curr = function[j];
}
int mult1 = stoi(multbefore);
int mult2 = stoi(multafter);
function[i] = ' ';
for (int k = 1; k <= multbefore.length(); k++) {
function[i - k] = ' ';
}
for (int k = 1; k <= multafter.length(); k++) {
function[i + k] = ' ';
}
function.insert(i, to_string(mult1 * mult2));
i--;
}
else if (function[i] == '/') {
string divbefore = "";
char curr = function[i - 1];
int j = i - 1;
while (curr != ' ' && curr != '*' && curr != '/' && curr != '+' && curr != '-' && j >= 0) {
divbefore += curr;
j--;
curr = function[j];
}
reverse(divbefore.begin(), divbefore.end());
string divafter = "";
curr = function[i + 1];
j = i + 1;
while (curr != ' ' && curr != '*' && curr != '/' && curr != '+' && curr != '-' && j < function.length()) {
divafter += curr;
j++;
curr = function[j];
}
int div1 = stoi(divbefore);
int div2 = stoi(divafter);
function[i] = ' ';
for (int k = 1; k <= divbefore.length(); k++) {
function[i - k] = ' ';
}
for (int k = 1; k <= divbefore.length(); k++) {
function[i + k] = ' ';
}
function.insert(i, to_string(div1 / div2));
i--;
}
function.erase(remove_if(function.begin(), function.end(), isspace), function.end());
}
for (int i = 0; i < function.length(); i++) {
if (function[i] == '+') {
string addbefore = "";
char curr = function[i - 1];
int j = i - 1;
while (curr != ' ' && curr != '+' && curr != '-' && j >= 0) {
addbefore += curr;
j--;
curr = function[j];
}
reverse(addbefore.begin(), addbefore.end());
string addafter = "";
curr = function[i + 1];
j = i + 1;
while (curr != ' ' && curr != '+' && curr != '-' && j < function.length()) {
addafter += curr;
j++;
curr = function[j];
}
int add1 = stoi(addbefore);
int add2 = stoi(addafter);
function[i] = ' ';
for (int k = 1; k <= addbefore.length(); k++) {
function[i - k] = ' ';
}
for (int k = 1; k <= addafter.length(); k++) {
function[i + k] = ' ';
}
function.insert(i, to_string(add1 + add2));
i--;
}
else if (function[i] == '-') {
string subbefore = "";
char curr = function[i - 1];
int j = i - 1;
while (curr != ' ' && curr != '+' && curr != '-' && j >= 0) {
subbefore += curr;
j--;
curr = function[j];
}
reverse(subbefore.begin(), subbefore.end());
string subafter = "";
curr = function[i + 1];
j = i + 1;
while (curr != ' ' && curr != '+' && curr != '-' && j < function.length()) {
subafter += curr;
j++;
curr = function[j];
}
int sub1 = stoi(subbefore);
int sub2 = stoi(subafter);
function[i] = ' ';
for (int k = 1; k <= subbefore.length(); k++) {
function[i - k] = ' ';
}
for (int k = 1; k <= subafter.length(); k++) {
function[i + k] = ' ';
}
function.insert(i, to_string(sub1 - sub2));
i--;
}
function.erase(remove_if(function.begin(), function.end(), isspace), function.end());
}
return function;
}