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.
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.
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.
_13th_Dragon napisał(a):
char ch='A'+rand(2*('Z'-'A'+1));
if(ch>'Z') ch+='a'-'A';
dlaczego mnożysz razy 2??
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.
a jak to zrobic naprosciej? a jakieś objaśnienia do tego???
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();
}
Najprościej może jednak tak:
const char Litery[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
char ch=Litery[rand()%(sizeof(Litery)-1)];