Cod sursa(job #1349134)

Utilizator dlemonAxinte Dana Raluca dlemon Data 20 februarie 2015 00:00:12
Problema Convertor Scor 0
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 1.54 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;

void parsekeys(string s, ofstream &g){ //Functia de parsare a cheilor
	for(size_t i=0;i<s.size();i++) {
		string key;
		if(s[i] == '"'){
			key.push_back(s[i+1]);
			i=i+2;
			while(s[i]!='"'){
				key.push_back(s[i]);
				i++;
			}
			if (!key.empty()){
				g<<key<<',';
			i = s.find(',',i);
			if(i == string::npos)
				break;
			}
		}
	}
	g<<"\n";
}
void parsevalues(string s, ofstream &g){ //Functia de parsare a valorilor
	for(size_t int i=0;i<s.size();i++) {
		string key;
		if(s[i] == ':'){
			while (s[i+1]=='\n' || s[i+1]==' '){
				i++;
			}
			if(s[i+1] == '"'){
				key.push_back(s[i+2]);
				i=i+3;
				while(s[i]!='"'){
					key.push_back(s[i]);
					i++;
				}
			}
			else{
				key.push_back(s[i+1]);
				i=i+2;
				while(s[i]!=',' && s[i]!='\n' && s[i]!=' ' && i<s.size() ){ 
					key.push_back(s[i]);
					i++;
				}
			}
			if (!key.empty()){
				g<< key <<',';
			}
		}
	}
}

int main(){
	ifstream f("convertor.in");
	ofstream g("convertor.out");

	string sir, s;
	getline(f,s,'}'); //Citire prima linie pana la intalnirea caracterului '}' 
	parsekeys(s, g); //Afisarea cheilor (fiecare obiect - aceleasi chei)
	parsevalues(s, g);//Valorile pentru primul obiect
	g<<'\n';
	while(!f.eof()){
		getline(f,sir,'}');
		if ( !sir.empty() && sir.find(']') == string::npos ){
			parsevalues(sir, g);//Valorile pentru restul obiectelor
			g<<'\n';
		}
	}
	f.close();
	g.close();
	
	return 0;
}