Je suis en train de générer des permutations aléatoires d'une chaîne fixe de 80 caractères en C. À ma grande consternation, le système, je travaille sur manque strfry(). Quelle est la meilleure façon pour moi de générer une permutation aléatoire de cette chaîne? Comme cela sera bouclé sur env. 100 000 fois, la performance est un problème.RANDOMIZE une chaîne en C
Répondre
Il suffit d'utiliser l'implémentation Open Source GLIBC, comme l'a constaté 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;
}
Vous pouvez modifier les types de données spécifiques GLIBC à quelque chose de plus générique.
Ce code utilise la Fisher-Yates shuffle qui est en fait assez facile à mettre en œuvre par vous-même, et très efficace.
gcry_randomize void (unsigned char * buffer, longueur size_t, enum niveau de gcry_random_level)
remplissage de tampon avec une longueur d'octets aléatoires en utilisant une qualité aléatoire tel que défini par niveau.
En plus d'être une fonction propriétaire, ce que je crains de ne pas avoir spécifié que je voudrais éviter, cela ne correspond pas vraiment à mon objectif. J'essaie de générer une permutation aléatoire d'une chaîne existante - pas une chaîne aléatoire. La fréquence des caractères est importante. – Max
créer un tableau de 80 en ligne, mettre un caractère et un nombre aléatoire dans chaque ligne du tableau, puis trier le tableau sur les nombres aléatoires.
Reconstruire chaîne de tableau trié.
- 1. Comment convertir une chaîne strings en chaîne en C++?
- 2. Convertir une chaîne en code C++
- 3. Comment convertir une chaîne en OctetString (C#)?
- 4. Chaîne Remplacer en C++
- 5. Comment convertir une chaîne en ascii en binaire en C#?
- 6. En C#, Comment convertir une chaîne hexadécimale en int?
- 7. C++ Conversion d'une valeur binaire en octets en une chaîne
- 8. C#: Convertir une chaîne en une référence d'objet
- 9. Chaîne "Sort Template" en C#
- 10. C# Mettre chaîne en TextBox
- 11. analyse de chaîne en C
- 12. chaîne Concat en C++ (STL)
- 13. Inversion d'une chaîne en C
- 14. Conversion de chaîne double en chaîne en C++
- 15. comprehension Chaîne^en C++ .Net
- 16. Que signifie Chaîne * en C#?
- 17. C# backgroundWorker signale une chaîne?
- 18. Convertir une chaîne en .net
- 19. Rechercher une phrase dans une chaîne (C#)
- 20. Utilisation de Regex pour modifier une chaîne en C#
- 21. En comparant une chaîne à un tableau dans l'objectif-C
- 22. Comment créer une instance à partir d'une chaîne en C#?
- 23. obtenir une chaîne à partir d'un octet [] en C#
- 24. Comment réutiliser une variable de chaîne en C++
- 25. Comment utiliser regex pour une partie de chaîne en C#
- 26. asp.net Convertir une chaîne CSV en chaîne []
- 27. Type de données Chaîne vs chaîne en C#
- 28. C#: trouver des instances d'une chaîne dans une chaîne
- 29. Passer une chaîne par référence en Javascript
- 30. .NET/C# - Convertir char [] en chaîne
Vous pouvez modifier le mot propriétaire il, sinon Stallman pourrait aller vous obtenez avec son katana. Un substitut approprié pourrait être spécifique au GLIBC. –
Konrad, vous êtes un gentleman et un érudit! J'ai essayé de chercher du code Google, mais je cherchais des choses comme «randomiser une chaîne en c» au lieu de simplement «strfry». Je vous remercie! – Max
@Vinko: très vrai. ;-) –