Pagini recente » Cod sursa (job #1537654) | Cod sursa (job #3146522) | Cod sursa (job #2339240) | Cod sursa (job #2813907) | Cod sursa (job #1342121)
#include <stdio.h>
#include <string.h>
#define MAX_LINE_SIZE 1024
#define MAX_KEY_SIZE 10000
// check if a string is whitespace only
int isWhitespace(char *s) {
while (*s != '\0') {
if (!isspace(*s))
return 0;
s++;
}
return 1;
}
// trim the spaces the string begins with
char* trimLeadingSpaces(char *s) {
while (isspace(*s))
s++;
return s;
}
int main() {
// input/output
freopen("convertor.in", "r", stdin);
freopen("convertor.out", "w", stdout);
char *keys[MAX_KEY_SIZE], *values[MAX_KEY_SIZE], buffer[MAX_LINE_SIZE], *token;
int index = 1, keysLength = 0, valuesLength = 0, keysReady = 0;
keys[0] = strdup("");
// read line by line
while (fgets (buffer, sizeof(buffer), stdin)) {
// tokenize each line
token = strtok(buffer, ",[{}]:\"");
while(token) {
// ignore whitespace
if(!isWhitespace(token)) {
token = trimLeadingSpaces(token);
// odd indexes contain keys
if(!keysReady && index % 2) {
if(strcmp(keys[0], token) == 0) {
keysLength = index / 2;
// if all the keys were read, stop reading them
keysReady = 1;
}
else {
keys[index / 2] = strdup(token);
keysLength++;
}
}
// even indexes contain values
else if(!(index % 2)) {
values[index / 2 - 1] = strdup(token);
valuesLength++;
}
index++;
}
token = strtok(NULL, ",[{}]:\"");
}
}
// print keys
for(index = 0; index < keysLength; index++)
printf("%s,", keys[index]);
printf("\n");
if(!keysReady)
return 1;
//print values
for(index = 0; index < valuesLength; index++) {
printf("%s,", values[index]);
if(index % keysLength == keysLength - 1)
printf("\n");
}
return 0;
}