Advertisement
iconic14

Eliminazione sottostringa da testo libero

Jun 22nd, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct Stringa {
  6.     char *stringa;
  7.     struct Stringa *next;
  8. } tstringa;
  9.  
  10. tstringa *head = NULL;
  11. const int DIM = 301;
  12.  
  13. void Stampa();
  14. void InsertC(char *buffer);
  15. tstringa *EliminaToken(char *buffer);
  16. tstringa *RicercaToken(char *buffer);
  17.  
  18. int main (int argc, char **argv){
  19.    
  20.     int i;
  21.     char stringa[DIM];
  22.     char token[DIM-1];
  23.    
  24.     printf("Inserisci testo libero> ");
  25.     while (scanf("%s", stringa) != EOF)
  26.         InsertC(stringa);
  27.    
  28.     printf("Inserisci token da eliminare> ");
  29.     scanf("%s", token);
  30.      
  31.     while (RicercaToken (token))
  32.         head = EliminaToken(token);
  33.    
  34.     Stampa();
  35. }
  36.  
  37. void Stampa (){
  38.     tstringa *curr = head;
  39.     while (curr){
  40.         printf("%s", curr->stringa);
  41.         curr = curr->next;
  42.     }
  43. }
  44.  
  45. void InsertC(char *buffer){
  46.     tstringa *curr, *pnodo;
  47.     curr = head;
  48.    
  49.     pnodo = (tstringa *) malloc (sizeof(tstringa));
  50.     pnodo->stringa = (char *) malloc (sizeof(char) * (strlen(buffer)+1));
  51.     strcpy(pnodo->stringa, buffer);
  52.    
  53.     pnodo->next = NULL;
  54.    
  55.     //if (!(*buffer))
  56.        // return;
  57.    
  58.     if(!head)
  59.         head = pnodo;
  60.     else {
  61.         while (curr && curr->next)
  62.            curr = curr->next;
  63.        
  64.         curr->next = pnodo;
  65.     }
  66. }
  67.  
  68. tstringa *EliminaToken (char *buffer){
  69.    
  70.     tstringa *curr, *prev;
  71.    
  72.     for (curr = head, prev = NULL;
  73.          curr && strcmp(buffer, curr->stringa) != 0;
  74.          prev = curr, curr = curr->next) ;
  75.        
  76.     //if (!(*buffer)) return;
  77.     if (!curr) return head;
  78.     if (!prev) return head = head->next;
  79.     else {
  80.         prev->next = curr->next;
  81.         free (curr);
  82.         return head;
  83.     }
  84. }
  85.  
  86. tstringa *RicercaToken(char *buffer){
  87.    
  88.     tstringa *curr = head;
  89.     while (curr && strcmp(buffer, curr->stringa))
  90.         curr = curr->next;
  91.    
  92.     return curr;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement