Cod sursa(job #1354307)

Utilizator RenataRenata Renata Data 21 februarie 2015 19:11:04
Problema Convertor Scor 100
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 2.3 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
FILE *g;

void afisare_cuvinte( char sir[] , int c )  //c=0 daca afisam cheile
                                            //c=1 daca afisam valorile
{
  char sep[8] = {',',':','"','[','{',']','\n'} , cuvant[100],
  alfabet[120] = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"
                 "1234567890`~!@#$%^&*_-+=|';?/>;<";
  char *p;
  int nr=c;

  p=strtok( sir, sep ); //extrage primul cuvant(secventa dintre separatori)
  while( p ) //cat timp mai sunt cuvinte
  {
       strcpy( cuvant, p );
       while( cuvant[0] == ' ') //stergem spatiile din cuvant
        strcpy( cuvant, cuvant+1 );
       if((strlen( cuvant ) != 0) && strchr( alfabet, cuvant[0] )) //daca este cheie sau valoare
        {
           if(nr % 2 == 0) //pozitiile cheilor cand c=0 si a valorilor cand c=1
            {
                //afisare
                 if(strchr( cuvant , '}' ) == 0 )
                    fprintf( g ,"%s," , cuvant );
                 else //daca avem cazul --> : 100}
                 {
                      strcpy( cuvant + strlen( cuvant ) - 1, cuvant + strlen( cuvant ));
                      fprintf( g ,"%s,\n" , cuvant );
                 }
            }
           nr++;
         }

      //daca intalnim '}', -ne oprim, cand afisam cheile
      //                   -trecem pe urmatoarea linie,cand afisam valorile
       if(strchr( cuvant , '}' ) != 0 )
        {
            if(c == 0)
                break;
            else
                fprintf( g, "\n");
        }
       p=strtok( NULL, sep ); //extragem urmatorul cuvant
  }
}
int main ()
{
  FILE *f;
  char *sir1, *sir2;
  long lungime_f;

  f= fopen( "convertor.in" , "rb" );
  g= fopen( "convertor.out" , "w" );

  //calculam lungimea fisierului
  fseek (f , 0 , SEEK_END);
  lungime_f = ftell(f);
  rewind(f);

  //citim intregul fisier in sir1 (sir1- pentru prelucrarea cheilor)
  sir1= (char*) calloc( 1 , lungime_f );
  fread ( sir1, lungime_f, 1, f );
  fclose(f);

  //copiem sir1 in sir2 (sir2- pentru prelucrarea valorilor)
  sir2= (char*) calloc( 1 , lungime_f );
  strcpy( sir2 , sir1 );

  afisare_cuvinte( sir1 , 0 );
  fprintf( g, "\n" );
  afisare_cuvinte( sir2 , 1 );
  fclose(g);
  return 0;
}