Pagini recente » pre_oni_gim2015 | Cod sursa (job #2508006) | Cod sursa (job #3126046) | Cod sursa (job #1816971) | Cod sursa (job #1346085)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define APPEND 0
#define IGNORE 1
/* Patch and go style code, it's late, just wanted to try it out. */
int main() {
freopen("convertor.in", "r", stdin);
freopen("convertor.out", "w", stdout);
char *whitespace = "{[] \t\n";
char curr;
char buff[100];
int r = 0, i = 0, first = 1;
int state = IGNORE;
int quote_count = 0;
while (r != EOF) {
r = scanf("%c", &curr);
/*printf("%c: %d, %d, %d\n", curr, state, first, quote_count);*/
if (state == IGNORE && strchr(whitespace, curr)) {
continue;
}
if (curr == '}') {
if (first) {
first = 0;
rewind(stdin);
}
quote_count = 0;
printf("\n");
continue;
}
if (curr == '"') {
++quote_count;
}
if (quote_count == 4) {
quote_count = 0;
}
if (curr == '"' && state == APPEND) {
/* Word end. */
buff[i] = '\0';
printf("%s,", buff);
state = IGNORE;
i = 0;
continue;
}
if (curr == ',' && quote_count == 2 && state == APPEND) {
/* Word end. */
buff[i] = '\0';
printf("%s,", buff);
state = IGNORE;
i = 0;
quote_count = 0;
continue;
}
if (curr == '"' && state == IGNORE) {
/* Word begin. */
if ((first && quote_count == 1) ||
(!first && quote_count == 3)) {
state = APPEND;
}
continue;
}
if (isdigit(curr) && state == IGNORE) {
/* Number begin. */
if (!first) {
state = APPEND;
}
}
if (curr == ',' && state == IGNORE && quote_count % 2 == 0) {
quote_count = 0;
}
if (state == APPEND) {
buff[i] = curr;
++i;
}
}
return 0;
}