我想仅使用'a','b'或'c'生成至少200个唯一的40个字符的字符串。例如,一个好的字符串将是“aaaa ... aaaa”(40-char)。到目前为止,这是我的方法:
char newid[41];
sprintf(newid, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%\n", "bbbb");
另一种方法:
char newid[41];
char* pad[41] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
sprintf(newid, "%s%s\n", pad+4, "bbbb");
但我仍然不知道如何制作一个自动化过程的循环......(抱歉,我是C中的菜鸟)。请帮忙;任何提示或方法表示赞赏!谢谢!
答案 0 :(得分:2)
2 ^ 64> 3 ^ 40所以只需在12157665459056928801
下选择200 (不同)随机64位数字并转换为基数3(a
,b
和{{ 1}}"数字"而不是通常的c
,0
和1
)。
答案 1 :(得分:0)
使用伪随机数生成器在' a',' b'之间随机选择。并且' c'。要强制实现唯一性,请跟踪以前生成的newid
值并丢弃重复项
#include <stdlib.h>
#include <string.h>
void generate() {
char previous[199][40+1];
char newid[40+1];
int i, j, unique;
srand(time(NULL));
newid[40] = '\0';
for(i=0; i < 200; i++) {
for(j=0; j < 40; j++) {
newid[j] = 'a' + (rand() % 3);
}
/* confirm newid is 'unique' */
unique=1;
for(j=0; unique && j < i; j++) {
if (strcmp(previous[j], newid) == 0)
unique=0;
}
if (!unique) {
/* discard duplicate */
i--;
continue;
}
/* save newly genererated unique value */
strcpy(previous[i], newid);
printf("%s\n", newid);
}
}