Pagini recente » Cod sursa (job #156559) | Cod sursa (job #545658) | Cod sursa (job #1588273) | Cod sursa (job #898847) | Cod sursa (job #1338480)
#include <string>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
vector<string> getobjs(string s) {
vector<string> v;
size_t t1 = 0, t2 = 0;
while(true) {
t1 = s.find("{", t1 + 1);
if (t1 == string::npos) break;
t2 = s.find("}", t2 + 1);
string o = s.substr(t1+1, t2-t1-1);
v.push_back(o);
}
return v;
}
vector <string> getpairs(string s) {
vector<string> v;
size_t t1 = 0, t2;
bool br = false;
while(true) {
t2 = s.find(",", t1);
if (t2 == string::npos) {
br = true;
t2 = s.length();
}
string p = s.substr(t1, t2-t1);
v.push_back(p);
if (br) break;
t1 = t2 + 1;
}
return v;
}
string getkey(string s){
size_t t1, t2;
t1 = s.find("\"");
t2 = s.find("\"", t1 + 1);
return s.substr(t1 + 1, t2 - 1);
}
string getval(string s) {
string v;
size_t i = s.find("\""), t1, t2;
bool num = false;
i = s.find("\"", i + 1);
i = s.find(":", i + 1) + 1;
for (;i < s.length(); ++i)
if (s.at(i) == '\"') {
t1 = i + 1;
break;
} else if (s.at(i) <= '9' && s.at(i) >= '0') {
t1 = i;
break;
num = true;
}
for (i = t1; i < s.length(); ++i)
if (s.at(i) == '\"' && !num) {
t2 = i - 1;
break;
} else if (num && (s.at(i) < '0' || s.at(i) > '9')) {
t2 = i - 1;
break;
}
return s.substr(t1,t2 - t1);
}
int main(){
ifstream f;
f.open("convertor.in");
ofstream fo("convertor.out");
string s, ss;
bool hw = false;
while (std::getline(f, ss)) {
s += ss;
}
vector<string> ov = getobjs(s);
for (vector<string>::iterator i = ov.begin(); i != ov.end(); ++i) {
string sh;
string sr;
vector<string> pv = getpairs(*i);
for (vector<string>::iterator j = pv.begin(); j != pv.end(); ++j) {
if (!hw) sh += getkey(*j) + ",";
sr += getval(*j) + ",";
}
if (!hw) fo << sh << endl;
fo << sr << endl;
hw = true;
}
return 0;
}