数组中的随机字符,不重复

Random characters from array without repetition

我尝试在 C 中创建一个程序,从数组中选择随机字符并将它们存储在第二个数组中但不重复。

代码:

int main() {
    srand(time(NULL));
    char characters[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };
    char array[20];
    int size = strlen(array);

    int random, random_character;

    for (int i = 0; i < 4; i++) {
        random_character = rand() % 4;
        random = characters[random_character];
        array[i] = random;
        for (int j = 0; j < 4; j++) {
            if (array[i] == array[j]) {
                array[i] = random;
            }
        }
    }

    for (int i = 0; i < 4; i++) {
        printf("%c ", array[i]);
    }
}

我的输出仍然至少有两个相同的字符。

  1. int size = strlen(array); 未定义行为,因为数组未初始化。另外类型错误。
  2. 您的随机索引是错误的,因为您可能想从 characters 数组中的所有字符中 select,而不仅仅是第 4 个字符。
  3. 您的重复检查有误。
  4. 类型错误等小问题
int main(void)
{
    srand ( time(NULL) );
    char characters[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'};
    char array[20];

    int random, random_character;
    size_t j;

    for(size_t i = 0; i < 4; )
    {
        random_character= rand() % sizeof(characters);
        random = characters[random_character];
        array[i] = random;
        for(j = 0; j < i; j++)
        {
            if(array[j] == random) break;
        }
        if(j == i) 
        {
            i++;
        }
    }

    for(size_t i = 0; i < 4; i++){
        printf("%c ", array[i]);
    }
}

https://godbolt.org/z/M9b73KK4r