visoft

frecventa_cuvinte_sortata

Dec 6th, 2019
155
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  ============================================================================
  3.  Name        : sortat_cuvinte.c
  4.  Author      :
  5.  Version     :
  6.  Copyright   : Your copyright notice
  7.  Description : Hello World in C, Ansi-style
  8.  ============================================================================
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14.  
  15. typedef struct{
  16.     char *cuvant;
  17.     int aparitii;
  18. } Aparitii;
  19.  
  20. int insereaza_cuvant(Aparitii *cuvinte, int nr_crt,
  21.                      char*de_inserat){
  22.     int gasit = 0;
  23.     for(int i = 0; i < nr_crt; i++){
  24.         int egal;
  25.         egal = strcmp(cuvinte[i].cuvant, de_inserat);
  26.         if (egal == 0){
  27.             cuvinte[i].aparitii++;
  28.             gasit = 1;
  29.             break;
  30.         }
  31.     }
  32.     if (!gasit){
  33.         cuvinte[nr_crt].cuvant = de_inserat;
  34.         cuvinte[nr_crt].aparitii = 1;
  35.         nr_crt++;
  36.     }
  37.     return nr_crt;
  38. }
  39.  
  40. int comparator(const void * a, const void * b){
  41.     Aparitii *a1,*a2;
  42.     a1 = (Aparitii*)a;
  43.     a2 = (Aparitii*)b;
  44.     return strcmp(a1->cuvant,  a2->cuvant);
  45. }
  46.  
  47. int main(void) {
  48.     char sir_initial[] = "sa ion au au sa sa sa ion b x c";
  49.     char *delimitatori = " ";
  50.     char *subsir;
  51.     Aparitii *cuvinte = (Aparitii*)malloc(20 * sizeof(Aparitii));
  52.     int nr_total_cuvinte = 0;
  53.     subsir = strtok(sir_initial, delimitatori);
  54.     while(subsir != NULL){
  55.         nr_total_cuvinte =
  56.                 insereaza_cuvant(cuvinte, nr_total_cuvinte, subsir);
  57.         subsir = strtok(NULL, delimitatori);
  58.     }
  59.  
  60.     qsort(cuvinte, nr_total_cuvinte, sizeof(Aparitii), comparator);
  61.  
  62.     for(int i=0;i<nr_total_cuvinte;i++){
  63.         printf("%s:%d\n", cuvinte[i].cuvant, cuvinte[i].aparitii);
  64.     }
  65.  
  66.     return EXIT_SUCCESS;
  67. }
RAW Paste Data