0 Daumen
126 Aufrufe

Ich soll einen Passwortgenerator in C++ erstellen mit diesen Bedingungen:

* 30 Zeichen
* mindestens 1 Kleinbuchstabe
* 6 Großbuchstaben
* mindestens 8 Ziffern
* 2 bis 5 Sonderzeichen

Ich habe bis jetzt nur geschafft einen Zufallsgenerator für alle Zeichen zu erstellen und mir fällt es etwas schwer die Bedingungen miteinzubinden. Kann mir jemand ein paar Tipps geben?

#include <iostream>
#include <time.h>

using namespace std;

int main() {
  srand(time(0));
  string pass;

  string data = "abcdefghijklmnopqrstuvwxyz"
              "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
              "0123456789"
              ";,:.+-*/%><=!~^&|[]{}()";
  for (int i=0; i<=30; i++)
  {

  pass = pass + data[rand()% 100];
  }

  cout << "Your password: " << pass;

  return 0;
}
Avatar von

1 Antwort

+1 Daumen
 
Beste Antwort
  1. Zeichenkette aus 30 Zeichen erzeugen.

            string pass(30, '\0');

  2. Speichern wie viele Zeichen noch nicht belegt sind.

            string::size_type n = 30;

  3. Anzahl der Sonderzeichen bestimmen.

            int count_special = 2 + rand()%4;

  4. Zufällig entsprechend viele Sonderzeichen auswählen und an eine zufällig ausgewählte Stelle des Passworts einfügen.

    for (int i = 0; i < count_special; ++i) {
      string::size_type pos = rand()%(n--);
      string::size_type free_pos
    = find_free_pos(pass, pos);
      pass[free_pos] = get_random_special();
    }
  5. Die Punkte 3. und 4. auch für Ziffern, Großbuchstaben und Kleinbuchstaben durchführen.

Die Funktion get_random_special liefert ein zufälliges Sonderzeichen. Du musst sie noch implementieren.

Die Funktion find_free_pos(s, n) liefert die n-te Position in s, an der noch kein Zeichen gespeichert wurde. Eine mögliche Implementierung sieht wie folgt aus:

string::size_type find_free_pos(
  const string& s,
  string::size_type n)
{
  string::size_type r = -1;
  string::size_type i = 0;
  do {
      if (s[i++] == '\0') {
          ++r;
      }
  } while (r < n);
  return i-1;
}
Avatar von 5,6 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community