Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- /* Worst function name ever */
- void Shift0sToTheRight(int* tab, int count);
- int main()
- {
- int tab[] = {0,2,8,3,2,0,9,4,0,0,0,1,2,4,1,2,0};
- int count = sizeof(tab)/sizeof(int);
- int i;
- Shift0sToTheRight(tab, count);
- /* On affiche le résultat */
- printf("%d", tab[0]);
- for (i = 1; i < count; ++i)
- printf(", %d", tab[i]);
- getchar(); /* Petite pause pour empêcher la console de se fermer trop vite */
- return 0;
- }
- /*
- ** La solution que j'ai utilisé consiste à remplir le tableau de zéro
- ** en partant du pointeur d'écriture (après la boucle) jusqu'à la fin avec memset.
- */
- void Shift0sToTheRight(int* tab, int count)
- {
- int* readPtr = tab; /* pointeur de lecture */
- int* writePtr = tab; /* pointeur d'écriture */
- int* endPtr = tab + count;
- while (readPtr != endPtr)
- {
- if (*readPtr != 0)
- *writePtr++ = *readPtr;
- readPtr++;
- }
- /* Mise à la valeur zéro des X derniers éléments, X étant le nombre de zéros trouvés */
- memset(writePtr, 0, (endPtr-writePtr)*sizeof(int));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement