簡體   English   中英

如何將隨機大寫字母數組填充為 C 中的函數?

[英]How do I fill an array of random uppercase letters as a function in C?

我正在嘗試編寫一個函數來用 40 個隨機大寫字母填充數組。 我試圖填充數組並打印它,但我沒有得到任何輸出。

先感謝您。

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

void fillS1(char y[]);

int main(int argc, const char * argv[])
{
char s1[40];
int n;

fillS1(&s1[40]);

for (n = 0; n < 41; n++) {
    printf("%s", s1);
}


return 0;
}

void fillS1(char y[40]){

int x = 1;

while (x < 41) {
    x = rand() % 26;
    x = 2 + 'A';
    x = y[x];
    x++;
}


}

我只會編碼

void fill_string_40(char str[])
{
   for (int i=0; i<40; i++)
     str[i] = 'A' + random() % 26;
   str[40] = (char)0; // (char)0 is equal to use '\0'
}

並將其用作(例如在您的main

{ char s[41];
  fill_string_40(s);
  printf("%s\n", s);
}

請注意,空終止字符需要一個額外的字節。 我們假設一些 ASCII 兼容的字符編碼。 一種更便攜的方式可能是

str[i] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[random() % 26];

因為文字字符串是字符的常量數組。

如果您使用 C++ 進行編碼,請參閱標准的<random>頭文件 如果您為 Linux 編寫代碼,請參閱random(4)getrandom(2) ,也許將它與srandom(3) 一起使用 另請閱讀有關Mersenne Twister 的信息

試試這個,不要忘記在程序開頭的某個地方調用 srand() 一次。

void fillRand(char ar[], size_t len)
{
    size_t i=0;
    if (0 == len)
        return;

    for (i=0;i<(len-1);++i)
       ar[i] = (rand() % 26) + 'A';
    ar[len-1] = 0;
}       

順便說一句,完全不可移植,因為規范不要求 'A'..'Z' 是連續的或連續的,但它可能適合您的需要。 如果需要絕對可移植性,那么以下方法將始終有效:

void fillRand(char ar[], size_t len)
{
    static const char a[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    size_t i=0;

    if (0 == len)
        return;

    for (i=0;i<(len-1);++i)
       ar[i] = a[ (rand() % (sizeof(a)-1)) ];
    ar[len-1] = 0;
}       

將適用於普通和 EBCDIC 平台。 (如果你不知道區別,就用這個)。

此外,您應該在調用fillS1()時傳遞第一個字符的地址。 替換fillS1(&s1[40]); fillS1(&s1[0]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM