在C中生成唯一字符数组

时间:2017-01-23 07:10:48

标签: c random unique

我正在尝试生成一个包含10个随机但唯一字符的数组。有时,当我运行代码时,字符不是唯一的。

我将不胜感激任何帮助。谢谢。

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT position, MIN(user) AS min_user
    FROM yourTable
    GROUP BY position
) t2
    ON t1.position = t2.position AND
       t1.user     = t2.min_user

2 个答案:

答案 0 :(得分:3)

问题是随机可以给出相同的数字。它并不知道你每次都想要一个不同的数字。

这是如何解决这个问题,我告诉你的方法,你需要对它进行编程。

确定参与的字符,然后创建一个包含这些字符的数组。

然后滚动骰子以在数组范围内给出数字。您获得的数字是数组的索引,然后您获取该索引中的字符。

然后取出数组中的最后一个字符并放入该索引,下次掷骰子时,将最大数量限制为比数组原始大小减去一个。

继续使用此算法,直到获得所需的所有字符数。

此算法可确保您获得不同的字符。

答案 1 :(得分:0)

只有您刚刚生成的字符与数组中的前一个字符不同时,您的代码才会进行检查;你应该尝试这样的旗帜:

srand(time(NULL));
char letters[10];
int is_unique = 1, i=0,j ;
while (i<10){
    is_unique = true;
    letters[i] = 'a' + rand() % 26;
    for(j=0;j<i;j++){
        if (letters[i]==letters[j])
            is_unique = false;
    }
        if (is_unique)
            i++;
}
顺便说一句,最好用26替换rand() % (122-97),对于阅读代码的人来说,这一点更清楚。

另一种方式是:

srand(time(NULL));
char letters[10];
int j;
for (int i = 0; i < 10; i++)
{
    letters[i] = 'a' + rand() % 26;
    j=0;
    while (j<i) {
        if (letters[i]==letters[j]){
            letters[i] = 'a' + rand() % 26;
            j = 1;
        } else 
            j++;
    }
    printf("%c\n", letters[i]);
}