tyrion

algoritmi-liste.c

Sep 2nd, 2012
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.92 KB | None | 0 0
  1. /* Soluzione dell'esame di febbraio 2012, usando le liste anche se non servono.
  2.  * Perché a qualcuno piacciono tanto.
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <stdbool.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10. struct node {
  11.     char info;
  12.     struct node* next;
  13. };
  14.  
  15. typedef struct node* Paroliere;
  16.  
  17. bool cercaEdElimina(Paroliere paroliere, char c) {
  18.     Paroliere fake = &(struct node){ .next = paroliere };
  19.     for (; fake->next != NULL; fake = fake->next)
  20.         if (fake->next->info == c) {
  21.             Paroliere temp = fake->next->next;
  22.             free(fake->next);
  23.             fake->next = temp;
  24.             return true;
  25.         }
  26.     return false;
  27. }
  28.  
  29. int contaOccorrenze(Paroliere paroliere, char *algoritmi) {
  30.     int i, occ = 0;
  31.     while (true) {
  32.         for (i = 0; i < strlen(algoritmi); i++) {
  33.             // printf("%c ", algoritmi[i]);
  34.             if (!cercaEdElimina(paroliere, algoritmi[i]))
  35.                 return occ;
  36.         }
  37.         occ++;
  38.     }
  39. }
  40.  
  41.  
  42. /***** Metodi di test *****/
  43.  
  44. Paroliere paroliereDaStringa(char *stringa) {
  45.     size_t length = strlen(stringa);
  46.     if (length == 0)
  47.         return NULL;
  48.     Paroliere array = calloc(length, sizeof(struct node));
  49.     for (int i = 0; i < length-1; i++) {
  50.         array[i].info = stringa[i];
  51.         array[i].next = &array[i+1];
  52.     }
  53.     array[length-1].info = stringa[length-1];
  54.     return array;
  55. }
  56.  
  57. void stampaParoliere(Paroliere paroliere) {
  58.     printf("Paroliere: \"");
  59.     for (; paroliere != NULL; paroliere = paroliere->next)
  60.         putchar(paroliere->info);
  61.     printf("\"\n");
  62. }
  63.  
  64. int main(int argc, char *argv) {
  65.     Paroliere p = paroliereDaStringa("belladipadella");
  66.     stampaParoliere(p);
  67.     printf("Occorrenze: %d\n\n", contaOccorrenze(p, "algoritmi"));
  68.  
  69.     p = paroliereDaStringa("belladipadellagormiti");
  70.     stampaParoliere(p);
  71.     printf("Occorrenze: %d\n", contaOccorrenze(p, "algoritmi"));
  72.  
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment