Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- bool end_condition(char* buffer, const size_t maxbuflen, size_t nplaces, const char* chars, const size_t nchars) {
- if (nplaces < maxbuflen - 1) return false;
- for (size_t i = 0; i <= nplaces; i++) {
- if (buffer[i] != chars[nchars - 1]) return false;
- }
- return true;
- }
- bool round_done(size_t place, char* buffer, const char* chars, const size_t nchars) {
- if (place == 0) {
- return buffer[place] == chars[nchars - 1];
- }
- char temp = buffer[0];
- for (size_t i = 0; i <= place; i++) {
- if (buffer[i] != chars[nchars - 1]) return false;
- }
- return true;
- }
- int main() {
- const size_t maxbuflen = 3;
- const char* chars = "abc";
- const size_t nchars = 3;
- char buffer[maxbuflen + 1];
- bool end = false;
- /* "Zero out" the buffer */
- for (size_t i = 0; i <= maxbuflen; i++)
- buffer[i] = '\0';
- size_t nplaces = 0, curr_place = 0;
- while (!end) {
- for (size_t i = 0; i < nchars; i++) {
- buffer[curr_place] = chars[i];
- std::cout << buffer << std::endl;
- if (end_condition(buffer, maxbuflen, nplaces, chars, nchars)) end = true;
- }
- if (round_done(nplaces, buffer, chars, nchars)) {
- nplaces++;
- for (size_t i = 0; i <= nplaces; i++) {
- buffer[i] = chars[0];
- }
- curr_place++;
- }
- else {
- size_t temp = curr_place - 1;
- while (buffer[temp] == chars[nchars - 1] && temp != -1) {
- if (buffer[temp] != chars[nchars - 1]) break;
- temp--;
- }
- if (temp == -1) {
- buffer[curr_place - 1] = buffer[curr_place - 1] + 1;
- buffer[curr_place] = chars[0];
- }
- else {
- buffer[temp] = buffer[temp] + 1;
- temp++;
- while (temp <= curr_place) {
- buffer[temp] = chars[0];
- temp++;
- }
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement