Cod sursa(job #1343154)

Utilizator relu.draganDragan Relu relu.dragan Data 14 februarie 2015 22:38:32
Problema Convertor Scor 70
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 2.02 kb

#include <string>
#include <fstream>
using namespace std;
ifstream f("convertor.in");
ofstream g("convertor.out");
int isDigit(char c)
{
  if ((int)c >= 48 && (int)c <= 57)
    return 1;
  else 
    return 0;
}
void print_value()
{
  //presupunem ca suntem pe pozitia caracterului :
  char c;
  //fseek(f, dotpos + 1, SEEK_SET);
  while (1)
  {
    f.get(c);
 
    if (c == '"')
    {
      //string
      f.get(c);
      do
      {
        g << c;
        f.get(c);
      }
      while (c != '"');
      g << ",";
      break;
    }
    else
      if (isDigit(c))
      {
        //number
        while (isDigit(c))
        {
           
          g << c;
          f.get(c);
        }
        g << c;
        break;
      }
  }
}  

int afisare_chei()
{
  long int nrkeys = 0;
  f.clear();
  f.seekg(0, ios::beg);
  //afisare prima cheie
  char c;
  int flag = 0;
  f.get(c);
  while (c!='"')
    f.get(c);
 
  f.get(c);
  while (c != '"')
  {
    g << c;
    f.get(c);
  }
  nrkeys++;
  g << ",";
 
  //afisare urmatoarele chei
  do
  {
    f.get(c);
 
    while (c != ',')
    {
      f.get(c);
      if (c == '}')
      {
        flag = 1;
        break;
      }
    }
    if (flag)
      break;
    else
      nrkeys++;
    f.get(c);
    while (c != '"')
      f.get(c);
    f.get(c);
    while (c != '"')
    {
      g << c;
      f.get(c);
    }
    g << ",";
  }
  while (c != '}');
  return nrkeys;
}
void get_values(long int nrkeys)
{
  long int valuenr = 0;
 
  char c;
   
  f.clear();
  f.seekg(0, ios::beg);

  f.get(c);
  while (c != ']')
  {
    if (c == ':')
    {
      valuenr++;
      print_value();
      if (valuenr % nrkeys == 0)
        g<<"\n";
    }
    f.get(c);
  }
   
}
int main(void)
{
    
    long int nrkeys;
        
   // start = clock();
     
    
    //printf("%d\n", get_nrkeys(f));
    nrkeys = afisare_chei();
    g << "\n";
    get_values(nrkeys);
    //get_dots_positions(f,g,0);
     
    f.close();
    g.close();
    //stop = clock();
    //printf("%.6f\n", (double)(stop - start) / CLOCKS_PER_SEC);
    return 0;
     
}