2016-09-11 5 views
0

Ich habe ein Problem beim Generieren einer zufälligen Zeichenfolge in einer Funktion.Drucken Sie eine zufällige Zeichenfolge

Im folgenden Code I ASCII-Zeichen von 65 bis 90. Ich möchte 48 enthalten bis 57 verwendet haben, 58 bis 64

Überspringen Gibt es eine Möglichkeit, dies zu tun?

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <time.h> 

int main() 
{ 
    char s[30]; 
    random_string(s, 6,65,90); 
    printf("\n%s\n", s); 
    return 0; 
} 

void random_string(char * string, unsigned length,int min,int max) 
{ 
    /* Seed number for rand() */ 
    srand((unsigned int) time(0) + getpid()); 

    /* ASCII characters 33 to 126 */ 
    unsigned int num_chars = length - 1; 
    unsigned int i; 
    for (i = 0; i < num_chars; ++i) 
    { 
     string[i] = rand() % (max - min + 1) + min; 
    } 

    string[num_chars] = '\0'; 
} 

Antwort

0

Ich denke, dass einfachste Weg, das zu erreichen, ist rand() würfeln, wenn Sie Zahl in unerwünschtem Bereich bekommen haben. Um den gewünschten Bereich anzugeben, können Sie anstelle von min/max eine Bitmaske oder ein Bool-Array verwenden.

Es wird wie folgt aussehen:

do { c = rand() % 256; } while (!desired[c]); 
string[i] = c; 
1

Wie wäre das?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

const char* wanted = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

void random_string(char* target, unsigned len, const char* sample, unsigned slen) { 
    while(len) { 
     *target = sample[rand() % slen]; 
     ++target, --len; 
    } 
    *target = '\0'; 
} 

int main() { 
    char rnd_str[21]; 
    //srand(...) 
    random_string(rnd_str, 20, wanted, strlen(wanted)); 
    printf("%s\n", rnd_str); 
} 
+0

ja, es ist auch eine gute Antwort. Aber ich habe es mir selbst behoben – Kumar

+0

gib uns ein upvote zumindest: p – michi7x7

+0

Sorry dafür, – Kumar

Verwandte Themen