Cod sursa(job #1340279)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 11 februarie 2015 18:37:02
Problema Convertor Scor 100
Compilator cpp Status done
Runda Arhiva Monthly Marime 2.95 kb
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

#define NMAX 10130
#define DIM 10000
#define INF (1<<30)

char buff[DIM];

int findfirst(char ch, int poz)
{
	int i,ok;
	do {
		if(poz>=DIM) {
			ok=fread(buff,sizeof(char),DIM,stdin);
			i=0;
		}
		else i=poz;
		//puts(buff);
		while(i<=DIM-1) {
			if(buff[i]==ch)
				return i;
			if(buff[i]=='}')
				return -i-1;
			if(buff[i]==']')
				return -INF;
			i++;
		}
		poz=DIM;
	} while(i>=DIM);
	return -1;
}

int main ()
{
	int i,ok;
	freopen("convertor.in","r",stdin);
	freopen("convertor.out","w",stdout);
	i=DIM;
	while(1) {
		i=findfirst('"',i);
		if(i<0)
			break;
		i++;
		if(i>=DIM) {
			ok=fread(buff,sizeof(char),DIM,stdin);
			i=0;
		}
		while(buff[i]!='"') {
			fwrite(buff+i,sizeof(char),1,stdout);
			i++;
			if(i>=DIM) {
				ok=fread(buff,sizeof(char),DIM,stdin);
				i=0;
			}
		}
		printf(",");
		i++;
		if(i>=DIM) {
			ok=fread(buff,sizeof(char),DIM,stdin);
			i=0;
		}
		while(buff[i]!='"' && isdigit(buff[i])==0) {
			if(buff[i]=='}')
				break;
			i++;
			if(i>=DIM) {
				ok=fread(buff,sizeof(char),DIM,stdin);
				i=0;
			}
		}
		if(buff[i]=='"') {
			i=findfirst('"',i+1);
			if(i<0)
				break;
			i++;
			if(i>=DIM) {
				ok=fread(buff,sizeof(char),DIM,stdin);
				i=0;
			}
		}
		else {
			while(isdigit(buff[i])) {
				i++;
				if(i>=DIM) {
					ok=fread(buff,sizeof(char),DIM,stdin);
					i=0;
				}
			}
		}
		if(i>=DIM) {
			ok=fread(buff,sizeof(char),DIM,stdin);
			i=0;
		}
	}
	printf("\n");
	fseek(stdin,0,SEEK_SET);
	for(i=findfirst('"',DIM);;i=findfirst('"',i)) {
		if(i==-INF)
			break;
		i++;
		if(i>=DIM) {
			ok=fread(buff,sizeof(char),DIM,stdin);
			i=0;
		}
		while(1) {
			i=findfirst('"',i);
			i++;
			if(i>=DIM) {
				ok=fread(buff,sizeof(char),DIM,stdin);
				i=0;
			}
			while(1) {
				if(buff[i]=='"' || isdigit(buff[i]))
					break;
				i++;
				if(i>=DIM) {
					ok=fread(buff,sizeof(char),DIM,stdin);
					i=0;
				}
			}
			if(buff[i]=='"') {
				i++;
				if(i>=DIM) {
					ok=fread(buff,sizeof(char),DIM,stdin);
					i=0;
				}
				while(buff[i]!='"') {
					fwrite(buff+i,sizeof(char),1,stdout);
					i++;
					if(i>=DIM) {
						ok=fread(buff,sizeof(char),DIM,stdin);
						i=0;
					}
				}
				i++;
				if(i>=DIM) {
					ok=fread(buff,sizeof(char),DIM,stdin);
					i=0;
				}
			}
			else {
				while(isdigit(buff[i])) {
					fwrite(buff+i,sizeof(char),1,stdout);
					i++;
					if(i>=DIM) {
						ok=fread(buff,sizeof(char),DIM,stdin);
						i=0;
					}
				}
			}
			printf(",");
			i=findfirst('"',i);
			if(i<0) {
				i=-i-1;
				i++;
				if(i>=DIM) {
					ok=fread(buff,sizeof(char),DIM,stdin);
					i=0;
				}
				break;
			}
			else {
				i++;
				if(i>=DIM) {
					ok=fread(buff,sizeof(char),DIM,stdin);
					i=0;
				}
			}
		}
		printf("\n");
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}