Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Author: Eric Warburg
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void deallocate(int num_names, char **last_names, char **first_names, int *ages)
- {
- int i;
- for (i = 0; i < num_names; i++)
- {
- free(last_names[i]);
- free(first_names[i]);
- }
- free(last_names);
- free(first_names);
- free(ages);
- }
- void print_list(int num_names, char **last_names, char **first_names, int *ages)
- {
- int i;
- char name[42];
- printf("Alphabetized List\n");
- printf("-----------------------------\n");
- for (i = 0; i < num_names; i++)
- {
- strcpy(name, strcat(first_names[i], " "));
- strcpy(name, strcat(name, last_names[i]));
- printf("%22s%6d\n", name, ages[i]);
- }
- }
- void read_file(FILE *inf, int *num_names, char ***last_names, char ***first_names, int **ages)
- {
- int i;
- char discard;
- fscanf(inf, "%d", num_names);
- // discard newline
- fscanf(inf, "%c", &discard);
- // allocate our arrays
- *last_names = (char **)malloc(*num_names * sizeof(char *));
- for (i = 0; i < *num_names; i++)
- (*last_names)[i] = (char *)malloc(21 * sizeof(char));
- *first_names = (char **)malloc(*num_names * sizeof(char *));
- for (i = 0; i < *num_names; i++)
- (*first_names)[i] = (char *)malloc(21 * sizeof(char));
- *ages = (int *)malloc(*num_names * sizeof(int));
- for (i = 0; i < *num_names; i++)
- {
- fscanf(inf, "%s", (*last_names)[i]);
- // strip comma from end of last name
- (*last_names)[i][strlen((*last_names)[i]) - 1] = '\0';
- // discard space
- fscanf(inf, "%c", &discard);
- fscanf(inf, "%s", (*first_names)[i]);
- fscanf(inf, "%d", &(*ages)[i]);
- // discard newline
- fscanf(inf, "%c", &discard);
- }
- fclose(inf);
- }
- void sort(int num_names, char ***last_names, char ***first_names, int **ages)
- {
- int i, j, k, temp_age;
- char temp_last[21], temp_first[21];
- for (i = 1; i < num_names; i++)
- {
- strcpy(temp_last, (*last_names)[i]);
- strcpy(temp_first, (*first_names)[i]);
- temp_age = (*ages)[i];
- j = i - 1;
- printf("Current: %c\n", (*first_names)[j][strspn((*first_names)[j], temp_first)]);
- printf("Temp: %c\n", temp_first[strspn((*first_names)[j], temp_first)]);
- // (*first_names)[j][strspn((*first_names)[j], temp_first)] > temp_first[strspn((*first_names)[j], temp_first)]
- // (*last_names)[j][0] > temp_last[0]
- for (j = i - 1; j >= 0 && (*last_names)[j][0] > temp_last[0], temp_first)]; j--)
- {
- strcpy((*last_names)[j + 1], (*last_names)[j]);
- strcpy((*first_names)[j + 1], (*first_names)[j]);
- (*ages)[j + 1] = (*ages)[j];
- }
- strcpy((*last_names)[j + 1], temp_last);
- strcpy((*first_names)[j + 1], temp_first);
- (*ages)[j + 1] = temp_age;
- }
- }
- int main(int argc, char * argv[])
- {
- int num_names,
- *ages;
- char **last_names,
- **first_names;
- FILE *inf = fopen(argv[1], "r");
- read_file(inf, &num_names, &last_names, &first_names, &ages);
- sort(num_names, &last_names, &first_names, &ages);
- print_list(num_names, last_names, first_names, ages);
- deallocate(num_names, last_names, first_names, ages);
- return 0;
- } // main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement