AleksandarArkan

M-intersezione tra due stringhe

Mar 27th, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.33 KB | None | 0 0
  1. /*void inserseca(char* insieme1, char* insieme2, char* intersezione);
  2.  calcola l'intersezione. */
  3.  
  4.  //funzione ausiliaria che mi serve
  5. void remove_duplicates(char *str){
  6.     int tail=1;//coda
  7.     int i,j;
  8.    
  9.     if(str==NULL)
  10.         return; //se e' un puntatore nullo allora termina
  11.        
  12.     char *tmp=str;//tmp punta alla prima cella della stringa
  13.    
  14.     while(*tmp){
  15.         tmp++; //finche tmp non trova il carattere di terminazione
  16.         //fallo scorrere in avanti
  17.     }
  18.    
  19.     //ora mi calcolo la lunghezza della stringa, facendo la differenza
  20.     //tra il puntatore che punta all'ultimo carattere e il nome della stringa
  21.     //che di suo rappresenta il primo elemento della stringa, cioe rappresenta il puntatore
  22.     //al primo carattere (stiamo parlando del nome della stringa)
  23.    
  24.     int len=tmp-str;//ottenuto la lunghezza
  25.    
  26.     if(len<2)//se la lunghezza e' minore di due allora, la nostra stringa
  27.     //ha solo un carattere e e' impossibile che ci siano elementi ripetuti,
  28.     //quindi termina
  29.         return;
  30.        
  31.    
  32.     //altrimenti
  33.     for(i=1;i<len;i++){
  34.             for(j=0;j<tail;j++){
  35.                 if(str[i]==str[j]){//ho trovato l'elemento uguale
  36.                     //nell'intervallo che va da j a tail
  37.                     break;//allora non fare niente
  38.                 }
  39.             }
  40.             //dopo il break arrivero' qui
  41.             //se j==tail vuol dire che non ho trovato elementi uguali all'elemento
  42.             //puntato dall'indice i all'interno del mio intervallo
  43.             if(j==tail){//se e' cosi
  44.                 str[tail]=str[i];//allora copialo nella mia stringa
  45.                 tail++;//aumento l'intervallo , e preparo la posizione
  46.                 //per il prossimo numero da scrivere
  47.             }
  48.     }
  49.     str[tail]='\0';
  50. }
  51.  
  52. //funzione principale
  53. void interseca(char* insieme1, char* insieme2, char* intersezione){
  54.     remove_duplicates(insieme1);
  55.     remove_duplicates(insieme2);
  56.     //prese singolarmente non contengono caratteri duppplicati.
  57.     //ora troviamo pero' l'intersezione, tra le due stringhe. andiamo a scrivere
  58.     //in un altra stringa, tutte quelle lettere comuni alle due stringhe
  59.    
  60.     //quello che faremmo e', per ogni lettera della prima stringa, andare a controllare
  61.     //se ce anche nella seconda stringa, se ce allora la scriviamo nella nostra
  62.     //terza stringa
  63.     int posizione=0;
  64.     char *p1;
  65.     char *p2;
  66.    
  67.     for(p1=insieme1;*p1;p1++){
  68.             for(p2=insieme2;*p2;p2++){
  69.                     if(*p1==*p2){
  70.                         intersezione[posizione]=*p1;
  71.                         posizione++;
  72.                     }
  73.             }
  74.     }
  75.     intersezione[posizione]='\0';
  76.    
  77.    
  78.     }
Advertisement
Add Comment
Please, Sign In to add comment