AleksandarArkan

M-rimuovi caratteri duplicati all'interno di una stringa

Mar 27th, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.47 KB | None | 0 0
  1. //rimuovi caratteri duplicati all'interno di una stringa
  2.  
  3. void remove_duplicates(char *str){
  4.     int tail=1;//coda
  5.     int i,j;
  6.    
  7.     if(str==NULL)
  8.         return; //se e' un puntatore nullo allora termina
  9.        
  10.     char *tmp=str;//tmp punta alla prima cella della stringa
  11.    
  12.     while(*tmp){
  13.         tmp++; //finche tmp non trova il carattere di terminazione
  14.         //fallo scorrere in avanti
  15.     }
  16.    
  17.     //ora mi calcolo la lunghezza della stringa, facendo la differenza
  18.     //tra il puntatore che punta all'ultimo carattere e il nome della stringa
  19.     //che di suo rappresenta il primo elemento della stringa, cioe rappresenta il puntatore
  20.     //al primo carattere (stiamo parlando del nome della stringa)
  21.    
  22.     int len=tmp-str;//ottenuto la lunghezza
  23.    
  24.     if(len<2)//se la lunghezza e' minore di due allora, la nostra stringa
  25.     //ha solo un carattere e e' impossibile che ci siano elementi ripetuti,
  26.     //quindi termina
  27.         return;
  28.        
  29.    
  30.     //altrimenti
  31.     for(i=1;i<len;i++){
  32.             for(j=0;j<tail;j++){
  33.                 if(str[i]==str[j]){//ho trovato l'elemento uguale
  34.                     //nell'intervallo che va da j a tail
  35.                     break;//allora non fare niente
  36.                 }
  37.             }
  38.             //dopo il break arrivero' qui
  39.             //se j==tail vuol dire che non ho trovato elementi uguali all'elemento
  40.             //puntato dall'indice i all'interno del mio intervallo
  41.             if(j==tail){//se e' cosi
  42.                 str[tail]=str[i];//allora copialo nella mia stringa
  43.                 tail++;//aumento l'intervallo , e preparo la posizione
  44.                 //per il prossimo numero da scrivere
  45.             }
  46.     }
  47.     str[tail]='\0';
  48. }
Advertisement
Add Comment
Please, Sign In to add comment