Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.21 KB | None | 0 0
  1. // Author: Eric Warburg
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. void deallocate(int num_names, char **last_names, char **first_names, int *ages)
  8. {
  9.   int i;
  10.  
  11.   for (i = 0; i < num_names; i++)
  12.   {
  13.     free(last_names[i]);
  14.     free(first_names[i]);
  15.   }
  16.  
  17.   free(last_names);
  18.   free(first_names);
  19.   free(ages);
  20. }
  21.  
  22. void print_list(int num_names, char **last_names, char **first_names, int *ages)
  23. {
  24.   int i;
  25.   char name[42];
  26.  
  27.   printf("Alphabetized List\n");
  28.   printf("-----------------------------\n");
  29.  
  30.   for (i = 0; i < num_names; i++)
  31.   {
  32.     strcpy(name, strcat(first_names[i], " "));
  33.     strcpy(name, strcat(name, last_names[i]));
  34.     printf("%22s%6d\n", name, ages[i]);
  35.   }
  36. }
  37.  
  38. void read_file(FILE *inf, int *num_names, char ***last_names, char ***first_names, int **ages)
  39. {
  40.   int i;
  41.      
  42.   char discard;
  43.  
  44.   fscanf(inf, "%d", num_names);
  45.  
  46.   // discard newline
  47.   fscanf(inf, "%c", &discard);
  48.  
  49.   // allocate our arrays
  50.   *last_names = (char **)malloc(*num_names * sizeof(char *));
  51.   for (i = 0; i < *num_names; i++)
  52.     (*last_names)[i] = (char *)malloc(21 * sizeof(char));
  53.  
  54.   *first_names = (char **)malloc(*num_names * sizeof(char *));
  55.   for (i = 0; i < *num_names; i++)
  56.     (*first_names)[i] = (char *)malloc(21 * sizeof(char));
  57.  
  58.   *ages = (int *)malloc(*num_names * sizeof(int));
  59.  
  60.   for (i = 0; i < *num_names; i++)
  61.   {
  62.     fscanf(inf, "%s", (*last_names)[i]);
  63.     // strip comma from end of last name
  64.     (*last_names)[i][strlen((*last_names)[i]) - 1] = '\0';
  65.     // discard space
  66.     fscanf(inf, "%c", &discard);
  67.     fscanf(inf, "%s", (*first_names)[i]);
  68.     fscanf(inf, "%d", &(*ages)[i]);
  69.     // discard newline
  70.     fscanf(inf, "%c", &discard);
  71.   }
  72.  
  73.   fclose(inf);
  74. }
  75.  
  76. void sort(int num_names, char ***last_names, char ***first_names, int **ages)
  77. {
  78.   int i, j, k, temp_age;
  79.  
  80.   char temp_last[21], temp_first[21];
  81.  
  82.   for (i = 1; i < num_names; i++)
  83.   {    
  84.     strcpy(temp_last, (*last_names)[i]);
  85.     strcpy(temp_first, (*first_names)[i]);
  86.     temp_age = (*ages)[i];
  87.    
  88.     j = i - 1;
  89.     printf("Current: %c\n", (*first_names)[j][strspn((*first_names)[j], temp_first)]);
  90.     printf("Temp: %c\n", temp_first[strspn((*first_names)[j], temp_first)]);
  91.    
  92.     // (*first_names)[j][strspn((*first_names)[j], temp_first)] > temp_first[strspn((*first_names)[j], temp_first)]
  93.     // (*last_names)[j][0] > temp_last[0]
  94.     for (j = i - 1; j >= 0 && (*last_names)[j][0] > temp_last[0], temp_first)]; j--)
  95.       {
  96.         strcpy((*last_names)[j + 1], (*last_names)[j]);
  97.         strcpy((*first_names)[j + 1], (*first_names)[j]);
  98.         (*ages)[j + 1] = (*ages)[j];
  99.       }
  100.     strcpy((*last_names)[j + 1], temp_last);
  101.     strcpy((*first_names)[j + 1], temp_first);
  102.     (*ages)[j + 1] = temp_age;
  103.   }
  104.  
  105. }
  106.  
  107. int main(int argc, char * argv[])
  108. {
  109.   int num_names,
  110.       *ages;
  111.      
  112.   char **last_names,
  113.        **first_names;
  114.        
  115.   FILE *inf = fopen(argv[1], "r");
  116.  
  117.   read_file(inf, &num_names, &last_names, &first_names, &ages);
  118.   sort(num_names, &last_names, &first_names, &ages);
  119.   print_list(num_names, last_names, first_names, ages);
  120.   deallocate(num_names, last_names, first_names, ages);
  121.  
  122.   return 0;
  123. } // main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement