Cerca i duplicati in un array

di il
4 risposte

Cerca i duplicati in un array

Salve ragazzi,
questo semplice programmino cerca i duplicati all'interno di un array,per poi stamparli nel caso essi esistano. L'ho implementato tramite indicizzazione degli array e tutto è andato a buon fine.
Provando ad ottenere il medesimo risultato tramite i puntatori però il programma non mi funziona e non capisco perchè.
Qualcuno può aiutarmi per favore ?
Di seguito posto il codice.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int a[]={1,1,7,3,9,15,8,13,3,15};
int *p,*k;
p=a;
k=&a[1];
while(*p<10) {
while (*k<10){
if(*p==*k)

cout<<*p;
k++;
}
p++;
}
system("PAUSE");
return EXIT_SUCCESS;
}

4 Risposte

  • Re: Cerca i duplicati in un array

    *p ti restituisce il contenuto della memoria puntata da p. Quindi inizialmente *p vale 1.
    Se tu scrivi
    while(*p<10) {
    vuol dire "finchè p punta ad un valore minore di 10".
    Per ciclare sui primi 10 elementi devi per forza utilizzare degli indici.
    Stesso discorso per *k.
  • Re: Cerca i duplicati in un array

    Quindi non c'è modo di fare questo programma tramite puntatori ?
  • Re: Cerca i duplicati in un array

    Potresti scrivere così
    
    	p=a;
    	
    	while(p <= &a[8])
    	{
    		k=p+1;
    	
    		while (k <= &a[9])
    		{
    			if(*p==*k)
    				cout<<*p;
    
    			k++;
    		}
    	
    		p++;
    	}
    
  • Re: Cerca i duplicati in un array

    Quindi non c'è modo di fare questo programma tramite puntatori ?
    Il fatto di avere degli "indici" non vuol dire che tu non possa utilizzare dei puntatori!
    Quello che volevo dire è che secondo me puoi scrivere (copio dal codice di oregon):
       
       int i_p;
       int i_k;
    
       p=a;
       i_p=0;
       
       while(i_p < 9)
       {
          k=p+1;
          i_k=i_p+1
       
          while (i_k < 10)
          {
             if(*p==*k)
                cout<<*p;
    
             k++;
             i_k++;
          }
       
          p++;
          i_p++;
       }
    gli indici i_p e i_k ti servirebbero solo per controllare i cicli.
Devi accedere o registrarti per scrivere nel forum
4 risposte