Trovato, bastava creare una serie di for annidati:
codice:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <time.h>
#define max 26
using namespace std;
int n;
char v[]= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char num[]= {'1','2','3','4','5','6','7','8','9','0'};
int main(int argc, char *argv[])
{
system("clear");
ofstream wordlist;
wordlist.open(argv[1],ios::out);
if(argv[1] == NULL)
wordlist.open("/home/amministratore/Scrivania/wordlist.txt",ios::out);
int gen_time;
cout <<"Lunghezza delle stringhe?\n\n";
cin >> n;
cout <<"Generazione in corso\n\n";
time_t time1;
time_t time2;
time1 = time(NULL);
if(n>=1)
for(int a=0; a<max; a++)
wordlist<<v[a]<<endl;
if(n>=2)
for(int a=0; a<max; a++)
for(int b=0; b<max; b++)
wordlist<<v[a]<<v[b]<<endl;
if(n>=3)
for(int a=0; a<max; a++)
for(int b=0; b<max; b++)
for(int c=0; c<max; c++)
wordlist<<v[a]<<v[b]<<v[c]<<endl;
if(n>=4)
for(int a=0; a<max; a++)
for(int b=0; b<max; b++)
for(int c=0; c<max; c++)
for(int d=0; d<max; d++)
wordlist<<v[a]<<v[b]<<v[c]<<v[d]<<endl;
if(n>=5)
for(int a=0; a<max; a++)
for(int b=0; b<max; b++)
for(int c=0; c<max; c++)
for(int d=0; d<max; d++)
for(int e=0; e<max; e++)
wordlist<<v[a]<<v[b]<<v[c]<<v[d]<<v[e]<<endl;
if(n>=6)
for(int a=0; a<max; a++)
for(int b=0; b<max; b++)
for(int c=0; c<max; c++)
for(int d=0; d<max; d++)
for(int e=0; e<max; e++)
for(int f=0; f<max; f++)
wordlist<<v[a]<<v[b]<<v[c]<<v[d]<<v[e]<<v[f]<<endl;
if(n>=7)
for(int a=0; a<max; a++)
for(int b=0; b<max; b++)
for(int c=0; c<max; c++)
for(int d=0; d<max; d++)
for(int e=0; e<max; e++)
for(int f=0; f<max; f++)
for(int g=0; g<max; g++)
wordlist<<v[a]<<v[b]<<v[c]<<v[d]<<v[e]<<v[f]<<v[g]<<endl;
if(n>=8)
for(int a=0; a<max; a++)
for(int b=0; b<max; b++)
for(int c=0; c<max; c++)
for(int d=0; d<max; d++)
for(int e=0; e<max; e++)
for(int f=0; f<max; f++)
for(int g=0; g<max; g++)
for(int h=0; h<max; h++)
wordlist<<v[a]<<v[b]<<v[c]<<v[d]<<v[e]<<v[f]<<v[g]<<v[h]<<endl;
if(n>=9)
for(int a=0; a<max; a++)
for(int b=0; b<max; b++)
for(int c=0; c<max; c++)
for(int d=0; d<max; d++)
for(int e=0; e<max; e++)
for(int f=0; f<max; f++)
for(int g=0; g<max; g++)
for(int h=0; h<max; h++)
for(int i=0; i<max; i++)
wordlist<<v[a]<<v[b]<<v[c]<<v[d]<<v[e]<<v[f]<<v[g]<<v[h]<<v[i]<<endl;
if(n>=10)
for(int a=0; a<max; a++)
for(int b=0; b<max; b++)
for(int c=0; c<max; c++)
for(int d=0; d<max; d++)
for(int e=0; e<max; e++)
for(int f=0; f<max; f++)
for(int g=0; g<max; g++)
for(int h=0; h<max; h++)
for(int i=0; i<max; i++)
for(int j=0; j<max; j++)
wordlist<<v[a]<<v[b]<<v[c]<<v[d]<<v[e]<<v[f]<<v[g]<<v[h]<<v[i]<<v[j]<<endl;
time2 = time(NULL);
gen_time = difftime(time2, time1);
cout <<"Generato in "<<gen_time<<" secondi"<<endl;
}
Però si tratta di un algoritmo troppo lento, e sto lavorando ad una versione più efficiente.
Prende in input i caratteri inseriti dall'utente,e usa la lunghezza della stringa.
Finora il codice iniziale è questo:
codice:
string lst = "";
void permut()
{
for(int size=0; size<lst.length();size++)
cout<<"prova";
}
int main(int argc, char *argv[])
{
cout<<"Brute Force Generator v1.0\n\n\n";
cout<<"Inserisci i caratteri da utilizzare\n\n>";
cin >> lst;
}
Vorrei troncare la string lst in caratteri per poterli incrementare con un for (altri consigli sono ben accetti), però non ho trovato qualcosa che fa al caso mio.
Se possibile gradirei una spiegazione di altri eventuali passaggi (non voglio che postiate tutta la soluzione, devo farcela da solo, ora vorrei solo una spiegazione sulle stringhe).
Grazie a tutti!