Cod sursa(job #1360289)

Utilizator SergiuVCioaca Valentin SergiuV Data 25 februarie 2015 13:31:19
Problema Convertor Scor 40
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.96 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#define MAX 256

void write_in_file(char **words, int n, int seq, FILE *out) {
	int i;

	for (i = 0; i < seq; i = i+2) {
		fprintf(out, "%s", words[i]);
		fprintf(out, "%c", ',');
	}

	fprintf(out, "%c", '\n');
	int k = 0;
	for (i = 1; i < n; i = i + 2) {
		fprintf(out, "%s", words[i]);
		fprintf(out, "%c", ',');
		++k;
		if (k == seq / 2 ) {
			fprintf(out, "%c", '\n');
			k = 0;
		}
	}
}

int main() {
	FILE *in, *out;
	char buffer[MAX];
	if ((in = fopen("convertor.in", "rt")) == NULL) {
		fprintf(stderr, "Nu pot deschide fisierul\n");
		exit(-1);
	}

	if ((out = fopen("convertor.out", "wt")) == NULL) {
		fprintf(stderr, "Nu pot deschide fisierul\n");
		exit(-1);
	}

	int k = 0, i, count = 0, opened = 0, digit = 0;
	int start, seq = 0, size = 1000;
	char **words;

	words = (char**) malloc (size * sizeof(char*));

	while (fgets(buffer, MAX-1, in)) {
		for (i = 0; i < strlen(buffer); ++i) {
			if (buffer[i] == '{') seq = 0;
			if (buffer[i] == '"' && opened == 0) {
				opened = 1;
				start = i + 1;
				continue;
			}

			if (buffer[i] == '"' && opened == 1) {
				opened = 0;
				words[k++] = (char *) malloc(MAX * sizeof(char));
				strncpy(words[k-1], buffer+start, count);
				if (k >= size) {
					size *= 2;
					words = (char **) realloc(words, size * sizeof(char *));
				}
				++seq;
				count = 0;
			}

			if (opened == 1) {
				++count;
			}

			if (opened == 0 && isdigit(buffer[i])) {
				++count;
				digit = 1;
				continue;
			} 

			if (opened == 0 && digit == 1 && !isdigit(buffer[i])) {
				words[k++] = (char*) malloc(MAX * sizeof(char));
				strncpy(words[k-1], buffer+(i-count), count);
				if (k >= size) {
					size *= 2;
					words = (char **) realloc (words, size * sizeof(char *));
				}
				++seq;
				count = 0;
				digit = 0;
			}
		}
	}

	write_in_file(words, k, seq, out);

	for (i = 0; i < size; ++i) 
		free(words[i]);
	free(words);

	fclose(in);
	fclose(out);
	return 0;
}