Cod sursa(job #1349027)

Utilizator dlemonAxinte Dana Raluca dlemon Data 19 februarie 2015 22:43:54
Problema Convertor Scor 90
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;


void parsekeys(string s, ofstream &g){
	for(int 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){
	for(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'){
					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,'}');
	parsekeys(s, g);
	parsevalues(s, g);
	g<<'\n';
	while(!f.eof()){
		getline(f,sir,'}');
	    int a=sir.find("]");
	    if ( (sir!="" ) && a<0 ){
	    	parsevalues(sir, g);
	    	g<<'\n';
	    }
    }
	f.close();
	g.close();

	return 0;
}