Losowanie liter do tablicy

0

Mam problem i strasznie się z tym męczę, jak wypełnić tablice dwuwymiarowa losowymi literami duzymi i malymi??
Chodzi mi o to jak "wywalic" z przedzialu te pozostale znaki. Prosze o pomoc, a najlepiej o fragment kodu.

0

Znak czyli char to kod danego znaku w tablicy kodów ASCII, możesz więc tam zajrzeć i losując liczby z właściwego zakresu przyporządkowywać je np dużym literom a w razie potrzeby dodając (a-A) uzyskać duże, np na wskutek dodatkowego losowania duże/małe albo po przekroczeniu przez wylosowaną liczbę Z czyli 90 albo losować od 65 (A) do 122 (z) i ponawiać losowanie w przypadku gdyby wylosowało się coś "większego od Z oraz mniejszego od a". Tak więc możliwości masz kilka.

0

char ch='A'+rand()%(2*('Z'-'A'+1));
if(ch>'Z') ch+='a'-'A';

EDIT: użyłem przeciążanego rand'a ze swojej biblioteki, poprawiono.

0
_13th_Dragon napisał(a):

char ch='A'+rand(2*('Z'-'A'+1));
if(ch>'Z') ch+='a'-'A';

dlaczego mnożysz razy 2??

0
rooker napisał(a):

dlaczego mnożysz razy 2??
No bo duże i małe. Jest błąd w poście wyżej, poprawiłem.

0

a jak to zrobic naprosciej? a jakieś objaśnienia do tego???

0

Oto działający przykład:

/* 
 * File:   main.cpp
 * Author: Administrator
 *
 * Created on 25 grudzień 2012, 14:14
 */

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstring>

int main()
{
    unsigned const int w = 5;
    unsigned const int k = 5;
    
    char wylosowane[w][k];

    const char * literki = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    srand(time(0));
    char * ptrW = wylosowane[0];
    for(int i = 0; i < w * k; i++,ptrW++) {
        *ptrW = literki[rand() % strlen(literki)];
    }
    
    ptrW = wylosowane[0];
    for(int i = 0; i < w * k; i++, ptrW++) {
        std::cout << *ptrW<< "\n";
    }
    
    std::cin.get();

}
 
0

Najprościej może jednak tak:

const char Litery[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
char ch=Litery[rand()%(sizeof(Litery)-1)];

1 użytkowników online, w tym zalogowanych: 0, gości: 1