我在函数中生成随机字符串时遇到问题。
在下面的代码中,我使用了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';
}
答案 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;