fork download
  1. #include <string>
  2. #include <iostream>
  3.  
  4. void callback( std::string const& text )
  5. {
  6. std::cout << text << "\n";
  7. }
  8.  
  9. bool next_permuation( std::string& test_case,
  10. std::string const& alphabet )
  11. {
  12. for( std::size_t i = 0; i < test_case.length(); ++i )
  13. {
  14. if( test_case[i] == alphabet.back() )
  15. {
  16. if( i == test_case.length() -1 )
  17. {
  18. // letztes Zeichen läuft über -> Ende
  19. return false;
  20. }
  21. // Zeichen an aktueller Stelle ersetzen und Schleifendurchlauf fortsetzen
  22. test_case[i] = alphabet.front();
  23. }
  24. else
  25. {
  26. auto pos = alphabet.find( test_case[i] );
  27. if( pos == std::string::npos )
  28. {
  29. // Zeichen nicht im Alphabet? -> Ende
  30. return false;
  31. }
  32. // kein Überlauf, Zeichen ersetzen
  33. test_case[i] = alphabet[pos +1];
  34. return true;
  35. }
  36. }
  37. return false;
  38. }
  39.  
  40. int main()
  41. {
  42. std::string const alphabet = "ABC";
  43. std::size_t max_length = 3;
  44.  
  45. for( std::size_t i = 1; i <= max_length; ++i )
  46. {
  47. std::string testcase( i, alphabet.front() );
  48. do
  49. {
  50. callback( testcase );
  51. }
  52. while( next_permuation( testcase, alphabet ) );
  53. }
  54. int z = 0;
  55. }
  56.  
Success #stdin #stdout 0s 4552KB
stdin
Standard input is empty
stdout
A
B
C
AA
BA
CA
AB
BB
CB
AC
BC
CC
AAA
BAA
CAA
ABA
BBA
CBA
ACA
BCA
CCA
AAB
BAB
CAB
ABB
BBB
CBB
ACB
BCB
CCB
AAC
BAC
CAC
ABC
BBC
CBC
ACC
BCC
CCC