Advertisement
Guest User

Untitled

a guest
Jun 19th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.32 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. struct Resourse {
  7.     char name[30];
  8.     int count;
  9. };
  10.  
  11. int comparator(const void *r1, const void *r2) {
  12.     const struct Resourse *res1 = (const struct Resourse *)r1;
  13.     const struct Resourse *res2 = (const struct Resourse *)r2;
  14.     return strcmp(res1->name, res2->name);
  15. }
  16.  
  17. int main() {
  18.     size_t res_count    = 0;
  19.     size_t res_size     = 1;
  20.     size_t sz = sizeof(struct Resourse);
  21.     struct Resourse *res = (struct Resourse *)malloc(res_size * sz);
  22.  
  23.     do {
  24.         struct Resourse res_cond;
  25.         scanf("%s", res_cond.name);
  26.         if (strcmp(res_cond.name, "Total") == 0)
  27.             break;
  28.         scanf("%d", &res_cond.count);
  29.         struct Resourse *search_result = bsearch(&res_cond, res, res_count, sz, comparator);
  30.         if (search_result) {
  31.             search_result->count += res_cond.count;
  32.             continue;
  33.         }
  34.         if (res_count == res_size) {
  35.             res_size <<= 1;
  36.             res = (struct Resourse *)realloc(res, res_size * sz);
  37.         }
  38.         res[res_count] = res_cond;
  39.         ++res_count;
  40.         qsort(res, res_count, sz, comparator);
  41.     } while (1);
  42.  
  43.     size_t i;
  44.     for (i = 0; i < res_count; ++i)
  45.         printf("%s %d\n", res[i].name, res[i].count);
  46.        
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement