如何在C中的字符串中随机播放字符

时间:2015-04-14 13:56:31

标签: c string random shuffle

我正在创建一个程序,其中一部分需要一句话,并混杂字母。 我知道C中正式没有字符串数据类型,所以从技术上讲,单词中的字符已经在数组中了?他们只需要排序。 (无论如何,这是我的理解)。 我也知道C对于实际的随机数非常好,我通常使用时间作为种子,不确定这是否会影响字母的随机播放。

例如:

单词 Hello
分成字符 H / E / L / L / O
随机 E / L / O / H / L
新词 Elohl

2 个答案:

答案 0 :(得分:2)

  

从技术上讲,单词中的字符已经在数组中了吗?

您可以将它们视为以null结尾的字符数组。将您喜欢的shuffle算法应用于字符串中0(包括0和strlen(str)之间的部分,独占以生成混洗字符串。

这里唯一的问题是并非所有字符串都可以在适当的位置进行洗牌。具体来说,表示字符串文字的字符串是不可写的。试图改变它们会导致不确定的行为。

例如,如果你这样做

char *word = "hello";
shuffle(word);

并尝试修改word中的shuffle个字符,您将获得未定义的行为。您需要将内容复制到可写数组中,然后才能对内容进行随机播放 - 例如,像这样:

char word[] = "hello";
shuffle(word);

答案 1 :(得分:0)

int compare(const void *a, const void *b){
        return *(const char *)a - *(const char *)b;
    }

    char arr[] = "dbaurjvgeofx";

    printf("Unsorted: %s\n", arr);
    qsort(arr, strlen(arr), 1, compare);
    printf("Sorted: %s\n", arr);