Advertisement
Guest User

RRRRRRRRRRRRRRRRRRRR

a guest
Nov 20th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. enum {N = 9000005};
  6.  
  7. int lower_case(char c) {
  8.     return 'a' <= c && c <= 'z';
  9. }
  10.  
  11. int upper_case(char c) {
  12.     return 'A' <= c && c <= 'Z';
  13. }
  14.  
  15. int char_comp(char c1, char c2) {
  16.     if (c1 == c2)
  17.         return 0;
  18.     if (lower_case(c1) && upper_case(c2))
  19.         return -1;
  20.     if (upper_case(c1) && lower_case(c2))
  21.         return 1;
  22.     if (c1 < c2)
  23.         return -1;
  24.     return 1;
  25. }
  26.  
  27. int comp(const void *s1, const void *s2) {
  28.     int i = 0;
  29.     while (1) {
  30.         char c1 = *(*(char **)(s1) + i);
  31.         char c2 = *(*(char **)(s2) + i);
  32.         if (!c1 || !c2)
  33.             break;
  34.         int cmp = char_comp(c1, c2);
  35.         if (cmp == 0) {
  36.             ++i;
  37.             continue;
  38.         }
  39.         return cmp;
  40.     }
  41.     char c1 = *(*(char **)(s1) + i);
  42.     char c2 = *(*(char **)(s2) + i);
  43.     if (!c1 && !c2)
  44.         return 0;
  45.     if (!c1)
  46.         return -1;
  47.     return 1;
  48. }
  49.  
  50. int main(void) {
  51.     int n;
  52.     scanf("%d\n", &n);
  53.  
  54.     char **a = malloc(n * sizeof(char*));
  55.  
  56.     for (int i = 0; i < n; ++i) {
  57.         char c = '*';
  58.         char *s = malloc(1);
  59.         int sz = 0, mem_sz = 1;
  60.         while (1) {
  61.             c = getchar();
  62.             if (c == '\n')
  63.                 break;
  64.             if (sz + 1 >= mem_sz) {
  65.                 mem_sz *= 2;
  66.                 char *s0 = realloc(s, mem_sz);
  67.                 s = s0;
  68.             }
  69.             s[sz] = c;
  70.             ++sz;
  71.         }
  72.  
  73.  
  74.         if (sz + 1 >= mem_sz) {
  75.             mem_sz += 1;
  76.             char *s0 = realloc(s, mem_sz);
  77.             s = s0;
  78.         }
  79.         s[sz] = '\0';
  80.         a[i] = realloc(s, sz + 1);
  81.     }
  82.  
  83.     qsort(a, n, sizeof(char*), comp);
  84.  
  85.     for (int i = 0; i < n; ++i) {
  86.         printf("%s\n", a[i]);
  87.     }
  88.     free(a);
  89.  
  90.     return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement