fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. int pstrcmp(const void *aa, const void *bb)
  6. {
  7. char *const *a = aa;
  8. char *const *b = bb;
  9.  
  10. return strcmp(*a, *b);
  11. }
  12.  
  13. void duplicates(const char *s, size_t len)
  14. {
  15. size_t n = strlen(s);
  16.  
  17. if (n > len) {
  18. size_t nn = n - len;
  19. const char **p = malloc(nn * sizeof(*p));
  20. size_t i;
  21.  
  22. for (i = 0; i < nn; i++) {
  23. p[i] = s + i;
  24. }
  25.  
  26. qsort(p, nn, sizeof(*p), pstrcmp);
  27.  
  28. i = 0;
  29. while (i < nn) {
  30. size_t j = i + 1;
  31.  
  32. while (j < nn && memcmp(p[i], p[j], len) == 0) j++;
  33.  
  34. if (j > i + 1) {
  35. printf("%.*s\n", (int) len, p[i]);
  36. }
  37.  
  38. i = j;
  39. }
  40.  
  41. free(p);
  42. }
  43. }
  44.  
  45. int main(void)
  46. {
  47. const char *s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT";
  48.  
  49. duplicates(s, 10);
  50.  
  51. return 0;
  52. }
  53.  
Success #stdin #stdout 0s 4884KB
stdin
Standard input is empty
stdout
AAAAACCCCC
CCCCCAAAAA