6 Stimmen

Zufallsgenerierung einer Zeichenkette in C

Ich versuche, zufällige Permutationen einer festen 80-Zeichen-Zeichenkette in C zu generieren. Zu meiner großen Bestürzung fehlt dem System, an dem ich arbeite, strfry(). Was ist der beste Weg für mich, eine zufällige Permutation dieser Zeichenfolge zu erzeugen? Da dies in einer Schleife ca. 100.000 Mal durchgeführt wird, ist die Leistung ein Problem.

13voto

Konrad Rudolph Punkte 503837

Verwenden Sie einfach die Open-Source-GLIBC-Implementierung, wie sie von Google-Code .

char *
strfry (char *string)
{
  static int init;
  static struct random_data rdata;
  size_t len, i;

  if (!init)
    {
      static int state[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
      rdata.state = NULL;
      __initstate_r (time ((time_t *) NULL), state, 8, &rdata);
      init = 1;
    }

  len = strlen (string);
  for (i = 0; i < len; ++i)
    {
      int32_t j;
      char c;

      __random_r (&rdata, &j);
      j %= len;

      c = string[i];
      string[i] = string[j];
      string[j] = c;
    }

  return string;
}

Vielleicht möchten Sie die GLIBC-spezifischen Datentypen in etwas Allgemeineres ändern.

Dieser Code verwendet die Fisher-Yates-Mischung die eigentlich recht einfach selbst zu implementieren und sehr effizient ist.

0voto

Erstellen Sie ein 80-zeiliges Array, fügen Sie ein Zeichen und eine Zufallszahl in jede Zeile des Arrays ein und sortieren Sie das Array dann nach den Zufallszahlen.

String aus sortiertem Array neu aufbauen.

-2voto

plan9assembler Punkte 2876

Void gcry_randomize (unsigned char *buffer, size_t length, enum gcry_random_level level)

Füllen des Puffers mit Zufallsbytes der Länge nach mit einer Zufallsqualität, die durch den Level definiert ist.

http://www.g10code.com/p-libgcrypt.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X