Cod sursa(job #1338480)

Utilizator cajumCaju Mihai Drosi cajum Data 10 februarie 2015 04:36:52
Problema Convertor Scor 0
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 1.8 kb
#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;	
}