Cod sursa(job #1353674)

Utilizator achirialexAlexandru Achiritoaei achirialex Data 21 februarie 2015 14:34:34
Problema Convertor Scor 0
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.09 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int comparare(char cuvant[], int lungime, char vector[256][1024]){
	int i;
	for(i = 0; i < lungime; i++)
		if(strcmp(cuvant, vector[i]) == 0)
			return 0;
	return 1;
}

int main(void){
	freopen("convertor.in", "r", stdin);
	freopen("convertor.out", "w", stdout);
	char buffer[1024];
	char auxiliar[1024];
	//Parsare dupa ,
	char *tokenVirgula;
	char *end_Virgula;
	//Parsare dupa :
	char auxPuncte[1024];
	char *tokenPuncte;
	char *end_Puncte;
	//Parsare dupa "
	char auxGhilimele[1024];
	char *tokenGhilimele;
	char *end_Ghilimele;
	//Retinem elementele
	int semHeader = 0;
	int semAfisare = 0;
	char header[256][1024];
	char contents[256][1024];
	int contHeader = 0, contCont = 0;
	int i;
	while(gets(buffer)){
		strcpy(auxiliar, buffer);
		tokenVirgula = strtok_r(auxiliar, ",", &end_Virgula);
		while(tokenVirgula != NULL){
//			printf("%s\n", tokenVirgula);
			strcpy(auxPuncte, tokenVirgula);
			tokenPuncte = strtok_r(auxPuncte, ":", &end_Puncte);
			strcpy(auxGhilimele, tokenPuncte);
			if(auxGhilimele[0] != '"'){
				int sem = 2;
				tokenGhilimele = strtok_r(auxGhilimele, "\"", &end_Ghilimele);
				while(tokenGhilimele != NULL){
					if(sem == 1){
						if(comparare(tokenGhilimele, contHeader, header) == 1){
							strcpy(header[contHeader++], tokenGhilimele);
						}
						else
							semHeader = 1;
//						printf("%s\n", header[contHeader - 1]);
						sem = 0;
						break;
					}
					tokenGhilimele = strtok_r(0, "\"", &end_Ghilimele);
					sem--;

				}
			}
			else{
				tokenGhilimele = strtok_r(auxGhilimele, "\"", &end_Ghilimele);
				if(comparare(tokenGhilimele, contHeader, header) == 1){
					strcpy(header[contHeader++], tokenGhilimele);
				}
				else
					semHeader = 1;
//				printf("%s-\n", header[contHeader - 1]);
			}
//			}
//			while(tokenPuncte != NULL){
//				tokenPuncte = strtok_r(0, ":", &end_Puncte);
//			}
			tokenVirgula = strtok_r(0, ",", &end_Virgula);
			if(semAfisare == 0 && semHeader == 1){
				for(i = 0; i < contHeader; i++)
					printf("%s,", header[i]);
				semAfisare = 1;
			}
		}
	}
	return 0;
}