Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include<stdlib.h>
  4. #include<ctype.h>
  5.  
  6. int is_anagr(char*a, char* b) {
  7.     int ok = 1;
  8.     if(strlen(a) != strlen(b))
  9.         return 0;
  10.     char* apr1 = calloc(sizeof(char), 'z' - 'a' + 1);
  11.     char* apr2 = calloc(sizeof(char), 'z' - 'a' + 1);
  12.     for (int i = 0; i < strlen(a); ++i)
  13.     {
  14.         apr1[a[i] - 'a']++;
  15.     }
  16.     for (int i = 0; i < strlen(b); ++i)
  17.     {
  18.         apr2[b[i] - 'a']++;
  19.     }
  20.     for (int i = 0; i <= 'z' - 'a'; ++i)
  21.     {
  22.         if(apr1[i] != apr2[i])
  23.             ok = 0;
  24.     }
  25.     return ok;
  26.  
  27. }
  28.  
  29. int sort_char(char* cuv[], int nr) {
  30.  
  31.     for (int i = 0; i < nr; i++) {
  32.             printf("%s\n", cuv[i]);
  33.     }
  34.  
  35.     for (int i = 0; i < nr; ++i)
  36.     {
  37.         for(int j = i+1; j < nr; j++)
  38.             if(strcmp(cuv[j],cuv[i]) < 0) {
  39.                 char* aux = cuv[j];
  40.                 cuv[j] = cuv[i];
  41.                 cuv[i] = aux;
  42.             }
  43.     }
  44.     printf("\n\n");
  45.     for (int i = 0; i < nr; i++) {
  46.             printf("%s\n", cuv[i]);
  47.     }
  48.     for (int i = 0; i < nr - 1; ++i)
  49.     {
  50.         int j = i + 1;
  51.         if (strcmp(cuv[i],cuv[j]) != 0) {
  52.             continue;
  53.         }
  54.         while (j < nr && strcmp(cuv[i],cuv[j]) == 0) {
  55.             j++;
  56.         }
  57.         int q = j - i - 1;
  58.         for(int k = 1; j < nr; j++, k++) {
  59.             cuv[i + k] = cuv[j];
  60.         }
  61.         nr -= q;
  62.     }
  63.  
  64.     printf("vectorul sortat :\n");
  65.     for (int i = 0; i < nr; ++i)
  66.     {
  67.         printf("%s\n",cuv[i] );
  68.     }
  69.     printf("cacaaaaaaaaaaaaa\n");
  70.     return nr;
  71. }
  72.  
  73. void sepcuv(FILE *f, char delim[], char* cuv[]) {
  74.     char* text = malloc(1000 * sizeof(char));
  75.     int i = 0;
  76.     fgets(text,1000,f);
  77.     char*p;
  78.     p = strtok(text, delim);
  79.     while(p) {
  80.         for (int k = 0; k < strlen(p); ++k)
  81.         {
  82.             p[k] = tolower(p[k]);
  83.         }
  84.         strcpy(cuv[i],p);
  85.         p = strtok(NULL, delim);
  86.         i++;
  87.     }
  88.     int* bifa = calloc(sizeof(int), i);
  89.     i = sort_char(cuv,i);
  90.     for(int j = 0; j < i; j++) {
  91.         if (bifa[j]) {
  92.             continue;
  93.         }
  94.         printf("%s",cuv[j]);
  95.         bifa[j]++;
  96.         for(int k = j + 1; k < i; k++) {
  97.             if(bifa[k] == 0)
  98.                 if(is_anagr(cuv[j], cuv[k]))
  99.                     {printf("-%s",cuv[k]);bifa[k]++;}
  100.         }
  101.         printf("\n");
  102.  
  103.     }
  104.  
  105. }
  106.  
  107. int main ()
  108. {
  109.     FILE* in = fopen("a.txt","rt");
  110.     char delim[] = " -,.\n";
  111.     char** cuv = malloc(100 * sizeof(char*));
  112.     for (int i = 0; i < 100; ++i)
  113.     {
  114.         cuv[i] = malloc(sizeof(char) * 100);
  115.     }
  116.     sepcuv(in,delim,cuv);
  117.     fclose(in);
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement