2016-12-20 2 views
-3

J'essaie de convertir un int en char en utilisant la valeur ASCII. Le int est généré de manière aléatoire entre 97 et 122 (de a à z).Convertir int en char (valeur ASCII)

Comment puis-je générer un nombre aléatoire entre 97 et 122 et le convertir en un caractère?

J'ai cherché plusieurs réponses avant de poser ma question, mais aucune n'a résolu le problème ou était complètement liée à mon besoin. Même this ne fonctionnait pas.

Voici ce que j'essaie de faire: dans une boucle for, le programme génère un nombre aléatoire et le convertit en int. Ceci est converti en sa valeur ASCII, puis placé dans un QString. Lorsque la boucle for est terminée, j'envoie le QString à line_edit. En suivant le lien ci-dessus, j'ai obtenu un m.

Voici mon code:

QString str; 
int maxlenght = 16; //the user will be able to set himself the maxlenght 
for (int i =0; i<maxlenght; i++) 
{ 
    int random = 97 + (rand() % (int)122-97+1); 
    char letter = (char)random; 
    if(i > 0) 
    { 
     str[i] = letter; 
    } 
} 

Et bien que le nombre aléatoire est généré dans la boucle, il me donne toujours le même car.

+2

liés/duper: http://stackoverflow.com/questions/19724346/generate-random-characters-in-c – NathanOliver

+0

Je recherche une réponse à ma question avant, mais n'a pas trouvé celui-ci. Merci, je vais essayer. – Newokmyne

+0

Ok, ça ne marche pas comme je le voulais. – Newokmyne

Répondre

-1

Vous devez convertir la chaîne en QString après cela.

#include <iostream> 
#include <cstdlib> 
#include <string> 
using namespace std; 

int main() 
{ 
    string str=""; 
    int maxlenght = 16; //the user will be able to set himself the maxlenght 
    for (int i =0; i<maxlenght; i++) 
    { 
     int rand_num = 97 + (rand() % (122 - 97 + 1)); 
     char letter = static_cast<char>(rand_num); 
     str += letter; 
    } 
    cout << str << endl; 
    return 0; 
} 
+0

Quel est le point de lancer '(int) (122 - 97 + 1)'? (aussi pourquoi n'utilisez-vous pas simplement le résultat réel de ce calcul?) – UnholySheep

+1

Très cassant. Fonctionne uniquement sur ASCII – NathanOliver

+0

@UnholySheep Il montre la plage [97,122] que le nombre aléatoire sera généré, comme demandé par l'OP. Vous pouvez le remplacer par la valeur réelle de 26, mais les lecteurs peuvent ne pas comprendre d'où vient ce nombre. –