2016-12-16 53 views
-4

我想選擇一個隨機字符,如果有從在C以下數組中隨機選擇一個字符,但只撿每個角色一次的方式....從一個數組

const char characters[13][4] = 
        { 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 
         'J' , 'K' , 'L' ,'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 
         'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y', 'Z', 

         'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 
         'J' , 'K' , 'L' , 'M' , 'N' ,'O' , 'P' , 'Q' , 'R' , 
         'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y', 'Z' 

        }; 
+0

你是說它應該打印整個數組?或者只是其中的一部分? – Michi

+0

到目前爲止,請顯示您的研究/調試工作。請先閱讀[問]頁面。 –

+0

整個數組,但我想隨機打印每個項目一次。 Thx –

回答

0

如果你可以修改角色,然後隨機選擇一個角色,如果它不是零(或某物),那麼你有角色,並且你得到它並將條目設置爲零(或某物)。如果它是零(或某物)然後循環並選擇另一個字符。

如果您不能修改原始文字,有一個包含一個布爾值,如果某個字符已經被拾取或不是另一種「陣列」。它應該鏡像characters陣列的尺寸,並檢查是否選取了某個角色。

3

當你拿起一個角色,只是從集合中刪除:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <time.h> 

char getRandomChar(char *set) { 
    size_t len = strlen(set); 
    if (len == 0) { 
     /* We are all out of characters */ 
     return -1; 
    } 
    /* Select a character at random */ 
    int rv = rand() % len; 
    char ret = set[rv]; 
    /* Remove the selected character from the set */ 
    set[rv] = set[len -1]; 
    set[len -1] = '\0'; 
    /* Return the character */ 
    return ret; 
} 

int main(void) { 
    char set[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    char randomChar; 

    /* Intialize random number generator */ 
    srand((unsigned)time(NULL)); 

    while ((randomChar = getRandomChar(set)) != -1) { 
     printf("Selected %c. Remaining: %s\n", randomChar, set); 
    } 
    return 0; 
} 

注意,代碼可以處理相同的字符出現超過一次。如果您希望每個字符被繪製兩次,請使用起始集"AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ"

+0

您的代碼已損壞。有些標題丟失,[這不是全部](http://pastebin.com/raw/qGzuHpxk) – Michi

+0

謝謝你的魚。我明天會再回來。三文魚這次。其中五個。如果你在中午之前讓我準備好了,那是可以接受的。 – Lundin

+0

@Lundin我沒有回答,因爲問題的質量(低)。我回答是因爲我認爲這是一個有趣的問題,值得在SO上得到答案。 –