【问题标题】:Print a random string打印随机字符串
【发布时间】:2023-03-17 14:35:02
【问题描述】:

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

在下面的代码中,我使用了 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';
}

【问题讨论】:

    标签: c string random ascii


    【解决方案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);
    }
    

    【讨论】:

    • 对不起,
    【解决方案2】:

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

    它看起来像这样:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多