-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1018.cpp
More file actions
120 lines (119 loc) · 2.97 KB
/
1018.cpp
File metadata and controls
120 lines (119 loc) · 2.97 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
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
#include <bits/stdc++.h>
using namespace std;
main(void) {
cin.tie(0);
ios_base::sync_with_stdio(0);
int n;
cin >> n;
cin.ignore();
while (n--) {
queue<const char*> q_out;
queue<const char*> q_out2;
char ipt[100];
char delim[] = " ";
cin.getline(ipt, 100);
vector<char*> splited_ipt;
int split_index_ = -1, split_index;
char* token = strtok(ipt, delim);
while (token != NULL) {
if (!(token[0] == 'I' && token[1] == 'F')) {
if (token[0] == 'T' && token[1] == 'H') {
split_index = split_index_;
/*
* A and B THEN C
* ^
* index=2=split_index
*/
token = strtok(NULL, delim);
continue;
}
char* token_ = new char[10];
*token_ = *token;
splited_ipt.push_back(token_);
split_index_++;
}
token = strtok(NULL, delim);
}
bool insert_not = true;
int split_index__ = split_index;
int offset = 0;
for (int i = 0; i <= split_index; i++) {
if (*splited_ipt[i] > 96) { // lowercase
switch (*splited_ipt[i]) {
case 'a':
q_out.push("or");
insert_not = true;
break;
case 'n':
insert_not = false;
if (i <= split_index) split_index__--;
offset--;
break;
case 'o':
q_out.push("and");
insert_not = true;
break;
}
} else {
if (insert_not) {
q_out.push("not");
offset++;
if (i <= split_index) {
split_index__++;
}
}
char* tmp = new char[2];
tmp[0] = *splited_ipt[i];
tmp[1] = '\0';
q_out.push(tmp);
insert_not = true;
}
}
insert_not = true;
for (int i = split_index + 1; i < splited_ipt.size(); i++) {
if (*splited_ipt[i] > 96) { // lowercase
switch (*splited_ipt[i]) {
case 'a':
q_out2.push("or");
insert_not = true;
break;
case 'n':
insert_not = false;
if (i <= split_index) split_index__--;
offset--;
break;
case 'o':
q_out2.push("and");
insert_not = true;
break;
}
} else {
if (insert_not) {
q_out2.push("not");
offset++;
if (i <= split_index) {
split_index__++;
}
}
char* tmp = new char[2];
tmp[0] = *splited_ipt[i];
tmp[1] = '\0';
q_out2.push(tmp);
insert_not = true;
}
}
cout << "IF ";
for (int i = split_index__ + 1; i < splited_ipt.size() + offset; i++) {
cout << q_out2.front() << " ";
q_out2.pop();
}
cout << "THEN ";
for (int i = 0; i <= split_index__; i++) {
cout << q_out.front();
q_out.pop();
if (i != split_index__) cout << " ";
}
cout << '\n';
}
return 0;
}