fork download
  1. #include <stddef.h>
  2.  
  3. const void *min_element(void *ptr, size_t cnt, size_t size, int (*comp)(const void *, const void *))
  4. {
  5. const void *min;
  6. size_t i;
  7.  
  8. if (!cnt) return NULL;
  9.  
  10. min = ptr;
  11. for(i = 1; i < cnt; ++i)
  12. if (comp(min, (const char*)ptr + size * i) > 0)
  13. min = (const char*)ptr + size * i;
  14.  
  15. return min;
  16. }
  17.  
  18. #include <stdio.h>
  19. #include <string.h>
  20.  
  21. int compare_ints(const void* a, const void* b)
  22. {
  23. int arg1 = *(const int*)a;
  24. int arg2 = *(const int*)b;
  25. if(arg1 < arg2) return -1;
  26. if(arg1 > arg2) return 1;
  27. return 0;
  28. }
  29.  
  30. int compare_strings(const void* a, const void* b)
  31. {
  32. return strcmp(*((char**) a), *((char**) b));
  33. }
  34.  
  35. int main()
  36. {
  37. int foo[] = {75, 72, 98, -84, 63};
  38. const char *bar[] = {"Blah", "Blupp", "Aachen", "Zeppelin", "Foobar"};
  39.  
  40. printf("Integerminimum ist: %d\n", *(int*) min_element(foo, sizeof(foo)/sizeof(*foo), sizeof(*foo), compare_ints));
  41. printf("Stringminimum ist: %s\n", *(const char**) min_element(bar, sizeof(bar)/sizeof(*bar), sizeof(*bar), compare_strings));
  42. return 0;
  43. }
  44.  
Success #stdin #stdout 0s 2248KB
stdin
Standard input is empty
stdout
Integerminimum ist: -84
Stringminimum ist: Aachen