2010-10-02 4 views
1

J'ai créé un programme pour supprimer les doublons dans un tableau, mais la condition if du programme reste toujours vraie. J'ai compris quel était le problème, j'ai changé arr [i] en arr [count] et alloué de la mémoire via malloc, mais le programme imprime le tableau tel qu'il est sans supprimer les doublons.Suppression de doublons dans le tableau

# include<stdio.h> 
    # include<stdlib.h> 
    int count=0; 
    void Delete(int *arr); 
    void Search(int *arr); 

    int main() 
    { 
    int i; 
    int *arr; 
    arr=(int*)malloc(sizeof(int)); 
    clrscr(); 
    printf("Enter array and press -1 to stop:\n");/*stops when -1 occurs*/ 
    for(count=0; ;count++)/*count is the count of the numbers*/ 
    { 
     scanf("%d",&arr[count]); 
     realloc(arr,sizeof((int)+count)); 
     fflush(stdin); 
     if(*(arr+count)==-1)/*This condition is never true.*/ 
     break; 
    } 
    Search(arr); 
    for(i=0;i<count;i++) 
    { 
     printf("%d\t",arr[i]); 
    } 
    getch(); 
    return 0; 
} 

    Search(arr); 
    for(i=0;i<count;i++) 
    { 
     printf("%d",&arr[i]); 
    } 
    getch(); 
    return 0; 
} 
+1

Qu'est-ce la signification de ceci: si (* (arr + compte) == - 1) - pourquoi ne pas utiliser arr [count] == ​​-1? Votre code est jonché de ceci ... –

+0

changement scanf ("% d", & arr [i]); à scanf ("% d", & arr [count]); edit: btw c'est les devoirs, n'est-ce pas? – George

+1

Garder la longueur du tableau dans une variable globale, 'count', est iffy .. – Arun

Répondre

2

Pour supprimer les doublons de tableau créer une méthode, que:

  • sortes le tableau
  • compte des valeurs uniques
  • crée un nouveau tableau, qui est de commencer la taille des valeurs uniques
  • adaptation de 1 tableau à l'autre, lorsque leurs valeurs sont différentes

Pour utiliser le raccourci en c, vous avez besoin de la fonction comparateur comme:

int comp(const void *x, const void *y) { 
    return (*(int*)x - *(int*)y); 
} 

Et alors vous pouvez l'appeler avec:

qsort(array, 10, sizeof(int), comp); 

Pour compter des objets uniques dans le tableau trié, itérer sur le tableau, et faire quelque chose comme:

if(sortedarray[i]!=sortedarray[i+1]) count++; 
+0

J'ai essayé de chercher dans le tableau, de trouver un doublon et d'effectuer une suppression. –

+0

@fahad C'est très efficace! Si vous utilisez une liste liée qui serait une bonne idée, mais pas avec un tableau. – Margus

1

Vous n'avez jamais initialisé arr. Actuellement, il s'agit juste d'un pointeur, il n'a pas de limite réelle, donc vous pourriez écraser quelque chose d'autre.

De plus, vous n'augmentez jamais scanf ("% d", & arr [i]); Je pense que vous voulez lire scanf ("% d", & arr [compteur]);

+0

Merci, comment est-ce que j'allouerais la mémoire si je ne sais pas combien de nombres entreront l'utilisateur? Devrais-je allouer de la mémoire et l'incrémenter avec realloc pour chaque itération? –

Questions connexes