Cod sursa(job #1349039)

Utilizator dlemonAxinte Dana Raluca dlemon Data 19 februarie 2015 22:53:36
Problema Convertor Scor 90
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 1.42 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' && s[i]!=' '){ 
                    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;
}