Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.06 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. bool end_condition(char* buffer, const size_t maxbuflen, size_t nplaces, const char* chars, const size_t nchars) {
  4.  
  5.     if (nplaces < maxbuflen - 1) return false;
  6.     for (size_t i = 0; i <= nplaces; i++) {
  7.         if (buffer[i] != chars[nchars - 1]) return false;
  8.     }
  9.     return true;
  10. }
  11.  
  12. bool round_done(size_t place, char* buffer, const char* chars, const size_t nchars) {
  13.     if (place == 0) {
  14.         return buffer[place] == chars[nchars - 1];
  15.     }
  16.     char temp = buffer[0];
  17.     for (size_t i = 0; i <= place; i++) {
  18.       if (buffer[i] != chars[nchars - 1]) return false;
  19.     }
  20.     return true;
  21. }
  22.  
  23. int main() {
  24.     const size_t maxbuflen = 3;
  25.     const char* chars      = "abc";
  26.     const size_t nchars    = 3;
  27.     char buffer[maxbuflen + 1];
  28.     bool end = false;
  29.  
  30.     /* "Zero out" the buffer */
  31.     for (size_t i = 0; i <= maxbuflen; i++)
  32.         buffer[i] = '\0';
  33.  
  34.     size_t nplaces = 0, curr_place = 0;
  35.     while (!end) {
  36.         for (size_t i = 0; i < nchars; i++) {
  37.           buffer[curr_place] = chars[i];
  38.           std::cout << buffer << std::endl;
  39.           if (end_condition(buffer, maxbuflen, nplaces, chars, nchars)) end = true;
  40.         }
  41.         if (round_done(nplaces, buffer, chars, nchars)) {
  42.             nplaces++;
  43.             for (size_t i = 0; i <= nplaces; i++) {
  44.               buffer[i] = chars[0];
  45.             }
  46.             curr_place++;
  47.         }
  48.         else {
  49.             size_t temp = curr_place - 1;
  50.             while (buffer[temp] == chars[nchars - 1] && temp != -1) {
  51.               if (buffer[temp] != chars[nchars - 1]) break;
  52.               temp--;
  53.             }
  54.             if (temp == -1) {
  55.               buffer[curr_place - 1] = buffer[curr_place - 1] + 1;
  56.               buffer[curr_place] = chars[0];
  57.             }
  58.             else {
  59.               buffer[temp] = buffer[temp] + 1;
  60.               temp++;
  61.               while (temp <= curr_place) {
  62.                 buffer[temp] = chars[0];
  63.                 temp++;
  64.               }
  65.             }
  66.         }
  67.     }
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement