Pagini recente » Cod sursa (job #2583868) | Cod sursa (job #3280138) | Cod sursa (job #2847730) | Cod sursa (job #361149) | Cod sursa (job #1342448)
#include <stdio.h>
#include <string.h>
#define MAX_LINE_SIZE 1024
#define MAX_KEY_SIZE 200000
// check if a string contains a number
int hasAlphanumerical(const char *s) {
while (*s != '\0') {
if (isalnum(*s))
return 1;
s++;
}
return 0;
}
// trim the extra non-alphanumerical characters leading the string
char* trimLeadingChars(char *s) {
while (!isalnum(*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 residual tokens
if(hasAlphanumerical(token)) {
token = trimLeadingChars(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");
//print values
for(index = 0; index < valuesLength; index++) {
printf("%s,", values[index]);
if(index % keysLength == keysLength - 1)
printf("\n");
}
return 0;
}