Advertisement
Guest User

Untitled

a guest
May 26th, 2015
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.49 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5.  
  6. typedef struct
  7. {
  8.     char* meno;
  9. }priatel;
  10. typedef struct
  11. {
  12.     char* menoUzivatela;
  13.     int pocetPriatelov;
  14.     priatel* menoPriatela;
  15. }ucet;
  16. int compareNames(ucet* zoznam,int count)
  17. {
  18.     for (int i = 0;i<count;i++)
  19.     {
  20.         if (!strcmp(zoznam[count].menoUzivatela,zoznam[i].menoUzivatela))
  21.         {
  22.             return i;
  23.         }
  24.         else
  25.         {
  26.         }
  27.     }
  28.     return -1;
  29. }
  30.  
  31. ucet parsee(char* riadok)
  32. {
  33.  
  34.     char *name;
  35.     ucet newParse;
  36.     newParse.menoUzivatela = malloc(strlen(riadok));
  37.     newParse.menoUzivatela = strtok(riadok,":");
  38.     name = strtok(NULL,"\n");
  39.     newParse.pocetPriatelov = 1;
  40.     newParse.menoPriatela = malloc(sizeof(priatel)*newParse.pocetPriatelov);
  41.     newParse.menoPriatela[newParse.pocetPriatelov-1].meno = malloc(strlen(name)*sizeof(char)+1);
  42.     strcpy(newParse.menoPriatela[newParse.pocetPriatelov-1].meno,name);
  43.     return newParse;
  44. }
  45.  
  46. ucet* load(char* cesta)
  47. {
  48.     FILE* file;
  49.     if (!(file = fopen(cesta,"r")))
  50.     {
  51.         fprintf(stderr,"Subor sa nepodarilo otvorit!");
  52.         exit(EXIT_FAILURE);
  53.     }
  54.     char* riadok;
  55.     ucet* zoznam = NULL;
  56.     int count = 0;
  57.     int repeat;
  58.     while (!(feof(file)))
  59.     {
  60.         riadok = calloc(220,sizeof(char));
  61.         if (!(feof(file)))
  62.         {
  63.  
  64.             fgets(riadok,200,file);
  65.             zoznam = realloc(zoznam,(count+1)*sizeof(ucet));
  66.             zoznam[count].menoPriatela = malloc(sizeof(priatel));
  67.             zoznam[count] = parsee(riadok);
  68.             repeat = compareNames(zoznam,count);
  69.             if (repeat == -1)
  70.             {
  71.                 count++;
  72.             }
  73.             else
  74.             {
  75.                 zoznam[repeat].pocetPriatelov++;
  76.                 zoznam[repeat].menoPriatela = realloc(zoznam[repeat].menoPriatela,sizeof(priatel)*zoznam[repeat].pocetPriatelov);
  77.                 zoznam[repeat].menoPriatela[zoznam[repeat].pocetPriatelov-1].meno = calloc(strlen(zoznam[count].menoPriatela[0].meno)+1,sizeof(char));
  78.                 strcpy(zoznam[repeat].menoPriatela[zoznam[repeat].pocetPriatelov-1].meno,zoznam[count].menoPriatela[0].meno);
  79.                 zoznam = realloc(zoznam, (count)*sizeof(ucet));
  80.             }
  81.  
  82.         }
  83.     }
  84.     count--;
  85.     int maximumPriatelov = zoznam[0].pocetPriatelov;
  86.     int poradie = 0;
  87.     for (int i = 0; i<=count;i++)
  88.     {
  89.         for (int j = 0; j<=count;j++)
  90.         {
  91.             if (zoznam[i].pocetPriatelov<zoznam[j].pocetPriatelov)
  92.             {
  93.                 maximumPriatelov = zoznam[j].pocetPriatelov;
  94.                 poradie = j;
  95.             }
  96.         }
  97.     }
  98.     printf("%s = %d (",zoznam[poradie].menoUzivatela,zoznam[poradie].pocetPriatelov);
  99.     for (int i = 0; i < maximumPriatelov;i++)
  100.     {
  101.         if (i == (maximumPriatelov - 1))
  102.             printf("%s)\n",zoznam[poradie].menoPriatela[i].meno);
  103.         else
  104.             printf("%s, ",zoznam[poradie].menoPriatela[i].meno);
  105.     }
  106.     fclose(file);
  107.     free(riadok);
  108.     for (int i = 0; i <= count; i++)
  109.     {
  110.         for (int j = 0; j<=count; j++)
  111.         {
  112.             free(zoznam[i].menoPriatela[j].meno);
  113.         }
  114.         free(zoznam[i].menoUzivatela);
  115.         free(zoznam[i].menoPriatela);
  116.     }
  117.     free(zoznam);
  118.     return zoznam;
  119. }
  120. int main(int argc, char** argv)
  121. {
  122.     if (argc < 3)
  123.     {
  124.         fprintf(stderr,"Nedostatok argumentov!");
  125.         return -1;
  126.     }
  127.     load(argv[1]);
  128.     return 0;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement