打印随机字符串

时间:2016-09-11 11:55:23

标签: c string random ascii

我在函数中生成随机字符串时遇到问题。

在下面的代码中,我使用了65到90之间的ASCII字符。我想要包括48到57,跳过58到64.

有没有办法做到这一点?

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

我认为,实现这一目标的最简单方法是,如果您的号码在不需要的范围内,则重新rand()。要指定所需范围,可以使用位掩码或bool数组而不是min / max。

看起来像这样:

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