fork download
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int* array_remove(int* fa, int* la, int v);
  5. void array_println(FILE* _out, const int* fa, const int* la);
  6.  
  7. int compare(const void* a, const void* b){
  8. return *(int*)b - *(int*)a;
  9. }
  10.  
  11. int main(void){
  12. int* e;
  13. int a[] = { 0, 5, 0, 0, 1, 0, -7, 0, 0, 0, 0, 8, 0, -3, 0, 2, 0, 9, 0 };
  14. size_t n = sizeof(a)/sizeof(a[0]);
  15.  
  16. array_println(stdout, a, a + n);
  17.  
  18. e = array_remove(a, a + n, 0);
  19. array_println(stdout, a, e);
  20.  
  21. n = (size_t)(e - a);
  22. qsort(a, n, sizeof(a[0]), &compare);
  23. array_println(stdout, a, e);
  24. return 0;
  25. }
  26.  
  27. int* array_remove(int* fa, int* la, int v){
  28. int* p;
  29. while((fa != la) && (*fa != v))
  30. ++fa;
  31.  
  32. for(p = fa; fa != la; *fa = *(++p)){
  33. if(*fa == v)
  34. --la;
  35. else
  36. ++fa;
  37. }
  38. return la;
  39. }
  40.  
  41. void array_println(FILE* _out, const int* fa, const int* la){
  42. while(fa != la)
  43. fprintf(_out, "%d ", *fa++);
  44. fputc('\n', _out);
  45. }
Success #stdin #stdout 0s 2156KB
stdin
Standard input is empty
stdout
0 5 0 0 1 0 -7 0 0 0 0 8 0 -3 0 2 0 9 0 
5 1 -7 8 -3 2 9 
9 8 5 2 1 -3 -7