Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*void inserseca(char* insieme1, char* insieme2, char* intersezione);
- calcola l'intersezione. */
- //funzione ausiliaria che mi serve
- void remove_duplicates(char *str){
- int tail=1;//coda
- int i,j;
- if(str==NULL)
- return; //se e' un puntatore nullo allora termina
- char *tmp=str;//tmp punta alla prima cella della stringa
- while(*tmp){
- tmp++; //finche tmp non trova il carattere di terminazione
- //fallo scorrere in avanti
- }
- //ora mi calcolo la lunghezza della stringa, facendo la differenza
- //tra il puntatore che punta all'ultimo carattere e il nome della stringa
- //che di suo rappresenta il primo elemento della stringa, cioe rappresenta il puntatore
- //al primo carattere (stiamo parlando del nome della stringa)
- int len=tmp-str;//ottenuto la lunghezza
- if(len<2)//se la lunghezza e' minore di due allora, la nostra stringa
- //ha solo un carattere e e' impossibile che ci siano elementi ripetuti,
- //quindi termina
- return;
- //altrimenti
- for(i=1;i<len;i++){
- for(j=0;j<tail;j++){
- if(str[i]==str[j]){//ho trovato l'elemento uguale
- //nell'intervallo che va da j a tail
- break;//allora non fare niente
- }
- }
- //dopo il break arrivero' qui
- //se j==tail vuol dire che non ho trovato elementi uguali all'elemento
- //puntato dall'indice i all'interno del mio intervallo
- if(j==tail){//se e' cosi
- str[tail]=str[i];//allora copialo nella mia stringa
- tail++;//aumento l'intervallo , e preparo la posizione
- //per il prossimo numero da scrivere
- }
- }
- str[tail]='\0';
- }
- //funzione principale
- void interseca(char* insieme1, char* insieme2, char* intersezione){
- remove_duplicates(insieme1);
- remove_duplicates(insieme2);
- //prese singolarmente non contengono caratteri duppplicati.
- //ora troviamo pero' l'intersezione, tra le due stringhe. andiamo a scrivere
- //in un altra stringa, tutte quelle lettere comuni alle due stringhe
- //quello che faremmo e', per ogni lettera della prima stringa, andare a controllare
- //se ce anche nella seconda stringa, se ce allora la scriviamo nella nostra
- //terza stringa
- int posizione=0;
- char *p1;
- char *p2;
- for(p1=insieme1;*p1;p1++){
- for(p2=insieme2;*p2;p2++){
- if(*p1==*p2){
- intersezione[posizione]=*p1;
- posizione++;
- }
- }
- }
- intersezione[posizione]='\0';
- }
Advertisement
Add Comment
Please, Sign In to add comment