使用C中的rand函数使用字母填充数组

时间:2014-10-05 03:40:43

标签: c arrays random

我正在编写一个编码和一个解码程序,所以我需要使用rand创建一个字母数组,以便它被洗牌。我的下面的代码导致重复的字母。如何使用rand函数显示26个字母中的每一个? 我确实尝试创建一个使用过的字符数组,但这导致了字符'a' - 'z'之外的字符,大多数是空格。

int main(int argc, char *argv[]) {
    int key, currch, i;
    char plain[] = "abcdefghijklmnopqrstuvwxyz";
    char coded[26];
    key = atoi(argv[1]);
    srand((unsigned)key);

    for(i=0; i<26; i++) {
            coded[i] = 'a' + rand() % 26;
    }
 // testing to see what is in the array
    i=0; 
    while(i<26) {
            printf("%c ", coded[i]);
            i++;
    }
}

使用33作为种子时的输出是

z h w p b i h x c q u m a v u v f u k u j j d s y g

如您所见,有重复项(u,v,j)

感谢您的反馈!

1 个答案:

答案 0 :(得分:2)

算法错误,你得到随机值,但没有改组数组。 <{1}}根本不在您的代码中使用。

高效的混洗算法是Fisher–Yates shuffle,也称为Knuth shuffle。伪代码是:

plain