пароли — C ++: как я могу сделать это без копирования и вставки? Это зацикливается

Я новичок в C ++, я пытаюсь сделать взлом пароля.

На данный момент он переходит от ааааа к zzzzz.

вопрос: возможно ли сделать это как от a до zzzzz?

Я работаю над этим без перерыва 6 часов и все еще не могу найти решение.

Жду вашей помощи, спасибо!

#include <iostream>
#include <string>

using namespace std;

int main()
{
string password;
string generatedPass;
int x;

cin >> password;

char digitArray[]={96,97,97,97,97,97,97,97,97,97};
int lenght=0;
int maxLenght=password.length();while( password.compare(generatedPass) != 0 ){
digitArray[0]++;
for(int x=0;x<password.length();x++){
if (digitArray[x] == 123)
{
digitArray[x] = 97;
digitArray[x + 1]++;
}
}

// creating the string with those digits
generatedPass=digitArray[password.length()-1]; // i set the first one here

for(int      i=password.length()-2   ;  i>=0  ;  i-- )
generatedPass+= digitArray[i]; // now i add other digits to next to first digit

cout << generatedPass << endl; // i put it to test how it looks
}

cout << generatedPass << endl; // gives the result
return 0;
}

-1

Решение

Похоже, здесь есть образец:

    if(digitArray[0]==123){     // i designed it like stopwatch, if like when second is 60, you make it 0 and increment minute by 1
digitArray[0]=97;       // 97 is the character 'a' in ASCII table, 122 is the 'z'
digitArray[1]++;
}

// HELP HERE, PLEASE!
//
// my program loops itself after this, copy paste doesn't look cool. how can i improve this part? that 4 in the digitArray[4] is maximum passwordlenght
// im working on this like nonstop 6 hours and still couldnt find a solution...

if(digitArray[1]==123){
digitArray[1]=97;
digitArray[2]++;
}

if(digitArray[2]==123){
digitArray[2]=97;
digitArray[3]++;
}

Общая форма шаблона:

if (digitArray[x] == 123)
{
digitArray[x] = 97;
digitArray[x + 1]++;
}

За исключением последнего случая. Я дам вам понять, как положить в for петля.

Редактировать 1: создание паролей от «а» до «zzzzzz»
Это очень похоже на подсчет в базе 26 или базе 27 (в зависимости от того, считаете ли вы пробелы).

Давайте рассмотрим добавление. Предполагая, что буквы от «а» до «z» являются смежными.

std::fill(&digitArray[0], &digitArray[sizeof(digitArray)], ' '); // Initialize
unsigned int last_digit_index = sizeof(digitArray) - 1U;
if (digitArray[last_digit_index] == ' ')
{
digitArray[last_digit_index] = 'a';
else
{
++digitArray[last_digit_index];
}

Здесь есть проблема, и это обрабатывает переполнение, иначе известный как нести.

Для переполнения цифра должна быть сброшена на », а следующая (или предыдущая) цифра должна быть увеличена.

Приведенный выше код заботится о приращении значения, поэтому необходимо изменить только индекс.

Изменение индекса и зацикливание (или повторение) оставлено в качестве упражнения для OP.

2

Другие решения

Других решений пока нет …