#include #include #include "stringarray4.h" #define MAX_STRINGS 128 #define MAX_STRING_LENGTH 256 struct StringArray { char *strings[MAX_STRINGS]; int nstrings; }; StringArray_T StringArray_new(void) { StringArray_T s = (StringArray_T) malloc(sizeof(struct StringArray)); s->nstrings = 0; return s; } void StringArray_free(StringArray_T stringarray) { free(stringarray); } void StringArray_write(StringArray_T s, FILE *fp) { int i; for (i = 0; i < s->nstrings; i++) fprintf(fp, "%s", s->strings[i]); } void StringArray_read(StringArray_T s, FILE *fp) { char string[MAX_STRING_LENGTH]; while (fgets(string, MAX_STRING_LENGTH, fp)) { s->strings[(s->nstrings)++] = strdup(string); if (s->nstrings >= MAX_STRINGS) break; } } void StringArray_sort(StringArray_T s, int (*compare)(const char *s1, const char *s2)) { int i, j; for (i = 0; i < s->nstrings; i++) { for (j = i+1; j < s->nstrings; j++) { if ((*compare)(s->strings[i], s->strings[j]) > 0) { char *swap = s->strings[i]; s->strings[i] = s->strings[j]; s->strings[j] = swap; } } } }