2016-09-11 13 views
0

関数内にランダムな文字列を生成する際に問題があります。これを行うにはどのような方法は、私は65から私は57から48までを含める90にASCII文字を使用していた次のコードで ランダムな文字列を出力する

、64

に58をスキップしてありますか?

#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'; 
} 

答えて

0

私が考えている最も簡単な方法は、望ましくない範囲に番号がある場合はrand()を再登録することです。希望の範囲を指定するには、min/maxの代わりにbitmaskまたはbool arrayを使用します。これはどのように

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

:それはこのようになります

#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

ええ、それも良い答えです。しかし、私はそれ自身を修正しました – Kumar

+0

少なくともupvoteを与えてください:p – michi7x7

+0

申し訳ありません、 – Kumar