使用3个字符生成200个唯一的40字符串

时间:2015-02-07 09:36:42

标签: c string char unique

我想仅使用'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中的菜鸟)。请帮忙;任何提示或方法表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:2)

2 ^ 64> 3 ^ 40所以只需在12157665459056928801下选择200 (不同)随机64位数字并转换为基数3(ab和{{ 1}}"数字"而不是通常的c01)。

答案 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);
        }
    }