fork(3) download
  1. #include <iostream> // this doesn't count for the 'no library' limitation?
  2.  
  3. struct letter_count
  4. {
  5. char letter = '\0';
  6. int count = 0;
  7. };
  8.  
  9. int add(letter_count *begin, letter_count *end, char letter)
  10. {
  11. while (begin != end)
  12. {
  13. if (begin->letter == letter)
  14. {
  15. return ++begin->count;
  16. }
  17. else if (begin->letter == '\0')
  18. {
  19. ++begin->letter = letter;
  20. return ++begin->count;
  21. }
  22.  
  23. ++begin;
  24. }
  25.  
  26. return 0;
  27. }
  28.  
  29. int max (int a, int b)
  30. {
  31. return a > b ? a : b;
  32. }
  33.  
  34. letter_count *buffer = nullptr;
  35.  
  36. int main()
  37. {
  38. auto testString = "supergalifragilisticoespialidoso";
  39.  
  40. int len = 0, index = 0, greater = 0;
  41.  
  42. while (testString[index++])
  43. ++len;
  44.  
  45. buffer = new letter_count[len];
  46.  
  47. for (index = 0; index < len; ++index)
  48. greater = max(add(buffer, buffer + len, testString[index]), greater);
  49.  
  50. for (index = 0; buffer[index].letter && index < len; ++index)
  51. std::cout << buffer[index].letter;
  52.  
  53. std::cout << '\n';
  54.  
  55. for (int count = 0; count < greater; ++count)
  56. {
  57. for (index = 0; buffer[index].letter && index < len; ++index)
  58. std::cout << (count < buffer[index].count ? '*' : ' ');
  59.  
  60. std::cout << '\n';
  61. }
  62.  
  63. delete [] buffer;
  64.  
  65. return 0;
  66. }
Success #stdin #stdout 0s 3472KB
stdin
test
stdout
supergaliftcod
**************
* *******   * 
*     ***   * 
*       *     
        *     
        *