#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#define MAX_LINE_LEN 1024
typedef struct{
int arraySize;
int arrayElements;
char ** arrayPtr;
} da_string;
void da_string_Init(da_string * dal, int initialSize){
dal->arrayElements = 0;
dal->arraySize = initialSize;
dal->arrayPtr = (char **)malloc(sizeof(char *)*initialSize);
}
void da_string_Destroy(da_string * dal){
int i;
for(i = 0; i < dal->arrayElements; i++)
free( dal->arrayPtr[i]);
free(dal->arrayPtr);
dal->arrayPtr = NULL;
dal->arrayElements = 0;
dal->arraySize = 0;
}
void da_string_AddItem(da_string * dal, char * item){
if(dal->arrayElements >= dal->arraySize){
dal->arraySize *= 2;
dal->arrayPtr = (char ** ) realloc (dal->arrayPtr, dal->arraySize *
sizeof(char *));
}
dal->arrayPtr[dal->arrayElements++] = item;
}
char * da_string_GetItem(da_string * dal, int index){
return dal->arrayPtr[index];
}
int compareAscInt (const void * a, const void * b){
return ( *(int*)a - *(int*)b );
}
int compareDcsString (const void * a, const void * b){
return (strcmp(*(char **)b,*(char **)a));
}
FILE *inputFile = NULL;
FILE *outputFile = NULL;
da_string stringArray;
char lineBuffer[MAX_LINE_LEN];
int main(int argc, char *argv[]){
if(argc != 3){
fprintf(stderr, "error argg\n");
return -1;
}
inputFile = fopen(argv[1], "r+"); //stdin is a valid file stream
outputFile = fopen(argv[2],"w+");
da_string_Init(&stringArray,10);
while ( fgets (lineBuffer, sizeof(lineBuffer), inputFile) != NULL){
char temp[MAX_LINE_LEN];
int i,j;
for(i = 0,j = -1; i < MAX_LINE_LEN; i++){
if(lineBuffer[i] == ','){
j = i;
printf("%d\n",j);
}
}
if(sscanf(lineBuffer,"%s",temp) == 1){
int dataLen = strlen(temp) + 1;
if(dataLen <= 1)
continue;
char * data = calloc(dataLen,sizeof(char));
data[dataLen - 1 ] = 0;
strncpy(data,temp,dataLen);
da_string_AddItem(&stringArray,data);
}
}
qsort (stringArray.arrayPtr, stringArray.arrayElements, sizeof(char *), compareDcsString);
int i;
for(i = stringArray.arrayElements-1; i >= 0; i--){
fprintf(outputFile,"%s\n",da_string_GetItem(&stringArray,i));
}
fclose (inputFile);
fclose (outputFile);
da_string_Destroy(&stringArray);
return 0;
}