Advertisement
Lynix

Untitled

Feb 20th, 2015
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.06 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. /* Worst function name ever */
  5. void Shift0sToTheRight(int* tab, int count);
  6.  
  7. int main()
  8. {
  9.     int tab[] = {0,2,8,3,2,0,9,4,0,0,0,1,2,4,1,2,0};
  10.     int count = sizeof(tab)/sizeof(int);
  11.     int i;
  12.  
  13.     Shift0sToTheRight(tab, count);
  14.  
  15.     /* On affiche le résultat */
  16.     printf("%d", tab[0]);
  17.     for (i = 1; i < count; ++i)
  18.         printf(", %d", tab[i]);
  19.  
  20.     getchar(); /* Petite pause pour empêcher la console de se fermer trop vite */
  21.     return 0;
  22. }
  23.  
  24. /*
  25. ** La solution que j'ai utilisé consiste à remplir le tableau de zéro
  26. ** en partant du pointeur d'écriture (après la boucle) jusqu'à la fin avec memset.
  27. */
  28. void Shift0sToTheRight(int* tab, int count)
  29. {
  30.     int* readPtr = tab; /* pointeur de lecture */
  31.     int* writePtr = tab; /* pointeur d'écriture */
  32.     int* endPtr = tab + count;
  33.  
  34.     while (readPtr != endPtr)
  35.     {
  36.         if (*readPtr != 0)
  37.             *writePtr++ = *readPtr;
  38.  
  39.         readPtr++;
  40.     }
  41.  
  42.     /* Mise à la valeur zéro des X derniers éléments, X étant le nombre de zéros trouvés */
  43.     memset(writePtr, 0, (endPtr-writePtr)*sizeof(int));
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement